在foreach循环内的开关嵌套中使用`continue`关键字

时间:2013-01-07 22:14:26

标签: c# loops foreach switch-statement continue

我有下面的代码(实际上比你看到的要长得多!)

foreach (SensorPair sensor in _sensorPairs)
{
    sensorByte = (byte) sensor.Sensor;

    if (!packet.Contains(sensorByte))
        continue;

    index = packet.IndexOf(sensorByte);
    byteCount = sensor.ByteCount;

    switch (byteCount)
    {
        case 1:
            try
            {
                switch(sensor.ValueType)
                {
                    case SensorValueType.Unsigned:
                        val = (int)packet[index + 1];
                        if (val > 255)
                            //*** WHAT DOES THIS CONTINUE DO?
                            continue;   
                        else //rise the event
                           OnSensorReport();                              
                    break;

你看到的continue keywoard会导致foreach循环开始迭代下一个项目,还是只传递给下一个case语句?

如果它没有对foreach循环做任何事情,我如何强制代码退出开关并在foreach循环中启动下一个itteration?

1 个答案:

答案 0 :(得分:21)

是的,它继续foreach循环。

咨询documentation; - )

总是有用的
  

continue语句将控制传递给下一次迭代   附上,发表,发表或发表声明的声明。

或更全面 - C# language specification

8.9.2继续声明

  

continue语句启动最近封闭的新迭代   while,do,for或foreach声明

     

continue语句的目标是嵌入式的终点   最近的封闭while,do,for或foreach的陈述   声明。如果一段时间没有包含continue语句,请执行,   for或foreach语句,发生编译时错误。

     

当多个while,do,for或foreach语句嵌套在其中时   相互之间,一个continue语句仅将应用于最内层   声明即可。要在多个嵌套级别之间传输控件,请转到   必须使用声明(第8.9.3节)。

     

continue语句不能退出finally块(第8.10节)。当一个   continue语句发生在finally块中,目标是   continue语句必须在同一个finally块中;否则一个   发生编译时错误。

     

continue语句执行如下:

     
      
  • 如果continue语句退出一个或多个try块   关联最后块,控制最初转移到   最后阻止了最里面的try语句。什么时候控制   到达finally块的终点,控制转移到   下一个封闭的try语句的finally块。这个过程是   重复,直到所有介入的try语句的finally块   已被执行。

  •   
  • 控制权转移到继续目标   言。

  •   
     

因为continue语句无条件地转移控制权   在其他地方,继续声明的终点永远不可达。