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语句的结束点永远不可达.