我编写此代码是为了获取一组字符,直到读取特定字符。我知道有更好的方法,但只是出于好奇。它没有用。循环没完没了地继续。为什么是这样 ???
foreach (char myChar in monthYear)
{
do
{
whichMonth = whichMonth + myChar;
} while (myChar.ToString() == "-");
}
我编写此代码是为了获取一组字符,直到读取特定字符。我知道有更好的方法,但只是出于好奇。它没有用。循环没完没了地继续。为什么是这样 ???
foreach (char myChar in monthYear)
{
do
{
whichMonth = whichMonth + myChar;
} while (myChar.ToString() == "-");
}
这就是您要告诉编译器执行的操作...
foreach (char myChar in monthYear)
{
do // Execute this piece of code
{
whichMonth = whichMonth + myChar;
} while (myChar.ToString() == "-"); // While myChar is '-'
// Here, the foreach loop moves to the next character
}
因此,给定 string 02-2013
,这是代码的执行路径。
foreach
我的性格monthYear
myChar = '0'
do
whichMonth = whichMonth + '0'
while(myChar == '-')
是false
,退出while
循环myChar = '2'
do
whichMonth = whichMonth + '2'
while(myChar == '-')
是false
,退出while
循环myChar = '-'
do
whichMonth = whichMonth + '-'
while(myChar == '-')
是true
,继续while
循环whichMonth = whichMonth + '-'
while(myChar == '-')
是true
,继续while
循环whichMonth = whichMonth + '-'
while(myChar == '-')
是true
,继续while
循环由于您的 while 循环,当它碰到“-”时,它实际上永远不会转到下一个字符。相反,请使用以下break
语句:
foreach (char myChar in monthYear)
{
whichMonth = whichMonth + myChar;
if(myChar == '-') break;
}
只是为了补充 Cedric 的答案,这将永远持续下去,因为您实际上从未真正更改myChar
do..while 循环内部的值。相反,您要做的是在更改时退出foreach
使用break
关键字。myChar
另外我会做:
if(myChar == '-')
break;
.ToString()
当您可以将其与您感兴趣的字符进行比较时,调用该字符并将其转换为字符串是没有意义的。
在你do ... while
循环中,myChar
永远不会被修改。只需使用带有 a 的条件break
即可退出循环。
foreach (char myChar in monthYear)
{
whichMonth = whichMonth + myChar;
if(myChar == '-') // myChar.ToString() is not necessary, you can check the char directly (use '' to specify a char)
break;
}
因为如果您的 myChar 等于“-”,它将始终执行
whichMonth = whichMonth + myChar;
您没有在执行期间更新 myChar
您正在编写一个 for each 循环,其中包含一个 while 循环。
foreach 将遍历字符串中的所有字符。
让我们假设 123-456
在第一次迭代中,您myChar
的值为 1。
那么你的while循环将测试是否myChar
等于“-”。但它永远不会获得新的价值。它将永远是 1。