在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
循环。
查阅文档总是有用的;-)
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语句的结束点永远无法到达。