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

Sae*_*ani 12 c# foreach loops continue switch-statement

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

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;
Run Code Online (Sandbox Code Playgroud)

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

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

Tim*_*ter 24

是的,它继续foreach循环.

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

continue语句将控制权传递给封闭的while,do,for或foreach语句的下一次迭代.

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

8.9.2继续声明

continue语句启动最近的while,do,for或foreach语句的新迭代.

continue语句的目标是最近的while,do,for或foreach语句的嵌入语句的结束点.如果while语句,do,for或foreach语句未包含continue语句,则会发生编译时错误.

当多个while,do,for或foreach语句彼此嵌套时,continue语句仅适用于最内层语句.要跨多个嵌套级别传输控制,必须使用goto语句(第8.9.3节).

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

continue语句执行如下:

  • 如果continue语句退出一个或多个具有关联的finally块的try块,则控制最初被转移到最里面的try语句的finally块.当控制到达finally块的结束点时,控制权转移到下一个封闭的try语句的finally块.重复此过程,直到执行了所有介入的try语句的finally块.

  • 控制权转移到continue语句的目标.

因为continue语句无条件地将控制转移到其他地方,所以continue语句的结束点永远不可达.