我有下面的代码(实际上比你看到的要长得多!)
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
keywoard会导致foreach循环开始迭代下一个项目,还是只传递给下一个case
语句?
如果它没有对foreach循环做任何事情,我如何强制代码退出开关并在foreach循环中启动下一个itteration?
答案 0 :(得分:21)
是的,它继续foreach
循环。
咨询documentation; - )
总是有用的continue语句将控制传递给下一次迭代 附上,发表,发表或发表声明的声明。
或更全面 - C# language specification:
8.9.2继续声明
continue语句启动最近封闭的新迭代 while,do,for或foreach声明。
continue语句的目标是嵌入式的终点 最近的封闭while,do,for或foreach的陈述 声明。如果一段时间没有包含continue语句,请执行, for或foreach语句,发生编译时错误。
当多个while,do,for或foreach语句嵌套在其中时 相互之间,一个continue语句仅将应用于最内层 声明即可。要在多个嵌套级别之间传输控件,请转到 必须使用声明(第8.9.3节)。
continue语句不能退出finally块(第8.10节)。当一个 continue语句发生在finally块中,目标是 continue语句必须在同一个finally块中;否则一个 发生编译时错误。
continue语句执行如下:
如果continue语句退出一个或多个try块 关联最后块,控制最初转移到 最后阻止了最里面的try语句。什么时候控制 到达finally块的终点,控制转移到 下一个封闭的try语句的finally块。这个过程是 重复,直到所有介入的try语句的finally块 已被执行。
控制权转移到继续目标 言。
因为continue语句无条件地转移控制权 在其他地方,继续声明的终点永远不可达。