我编写此代码是为了获取一组字符,直到读取特定字符。我知道有更好的方法,但只是出于好奇。它没有用。循环没完没了地继续。为什么是这样 ???
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 的答案,这将永远持续下去,因为您实际上从未真正更改myChardo..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。