【问题标题】:Using `continue` keywoard in a switch nest inside a foreach loop [closed]在foreach循环内的开关嵌套中使用`continue`关键字[关闭]
【发布时间】:2012-12-21 17:11:07
【问题描述】:

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

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;

您看到的 continuekeywoard 是否会导致 foreach 循环开始迭代下一个项目,或者它只是传递到下一个 case 语句?

如果它对 foreach 循环不做任何事情,我该如何强制代码退出 switch 并开始 foreach 循环中的下一次迭代?

【问题讨论】:

  • 当前foreach循环的continues(或跳到下一次迭代)。
  • -1,你测试的时候,发生了什么?
  • 它继续循环。转到下一个案例是“goto Case 2;”。
  • 谢谢你的否定,我真的需要那个:D
  • 我有一个一致的控制结构(循环与 try/catch 包含switch)。 break 跳到switch 的末尾,continue 跳到下一次迭代,异常触发异常处理并继续下一次迭代。 Here is an MCVE 只要 ideONE 保留它。

标签: c# loops foreach switch-statement continue


【解决方案1】:

是的,它继续foreach 循环。

咨询documentation 总是有用的;-)

continue 语句将控制权传递给 将它出现的 while、do、for 或 foreach 语句括起来。

或者——更全面的——C# language specification:

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 节)。当一个 continue 语句出现在 finally 块中,即 continue 语句必须在同一个 finally 块中;否则 发生编译时错误。

一条 continue 语句执行如下:

  • 如果 continue 语句退出一个或多个 try 块 关联的 finally 块,控制最初转移到 finally 块最里面的 try 语句。何时以及是否控制 到达 finally 块的终点,控制转移到 下一个封闭的 try 语句的 finally 块。这个过程是 重复直到所有介入的 try 语句的 finally 块 已经被处决了。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-11
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 2015-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多