在foreach循环中的switch巢中使用' continue '关键字

本文关键字:关键字 continue 循环 foreach switch | 更新日期: 2023-09-27 17:50:59

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

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关键字是否导致foreach循环开始迭代下一项或它只是传递到下一个case语句?

如果它没有对foreach循环做任何事情,我怎么能强制代码退出开关并在foreach循环中开始下一个迭代?

在foreach循环中的switch巢中使用' continue '关键字

是,继续foreach循环。

查阅文档总是有用的;-)

continue语句将控制传递给方法的下一次迭代将while、do、for或foreach语句括在其中

或更全面的 c#语言规范:

8.9.2 continue语句

continue语句开始对最近的封装进行新的迭代while、do、for或foreach语句

continue语句的目标是嵌入语句的结束点最近的封闭while、do、for或foreach语句声明。如果continue语句没有被while包围,则执行;For或foreach语句发生编译时错误。

当多个while、do、for或foreach语句嵌套在其中时因此,continue语句只对最内层应用声明。要跨多个嵌套层传递控制,使用goto必须使用语句(§8.9.3)。

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

continue语句执行如下:

  • 如果continue语句退出一个或多个try块关联的finally块,控制权被初始转移到最里面的try语句的最后一个块。When和if控制到达最终块的终点时,控制权转移到下一个封闭try语句的最后一个块。这个过程是重复,直到最后阻塞所有中间的try语句

  • 控制权转移到目标的继续声明。

因为continue语句无条件地转移控制在其他地方,continue语句的结束点永远无法到达。