繁体   English   中英

在循环C#时这样做有什么问题?

[英]What is wrong with this do…while loop C#?

我编写了这段代码,以获取一组字符,直到读取了特定字符为止。 我知道有一种更好的方法,但只是出于好奇。 没用 循环不断地继续。 为什么是这样 ???

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
}

因此,给定字符串02-2013 ,这是代码的执行路径。

  • monthYear foreach字符
    • 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的答案,这将一直持续下去,因为您实际上从未在do..while循环内更​​改myChar的值。 相反,您要做的是在myChar更改时使用break关键字退出foreach

另外我会做:

if(myChar == '-')
   break;

可以只将它与您感兴趣的char进行比较,而调用.ToString()并将char转换为字符串则毫无意义。

do ... while循环时,不会修改myChar 只需使用带有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

您正在为每个循环编写一个while循环。

foreach将遍历字符串中的所有字符。

让我们假设123-456

在第一次迭代中,您的myChar将具有值1。

然后您的while循环将测试myChar是否等于“-”。 但是它永远不会获得新的价值。 永远是1。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM