17

私は以下のコードを持っています (実際には、あなたが見るよりもずっと長いです!)

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 ループで次の反復を開始するにはどうすればよいですか?

4

1 に答える 1

32

はい、foreachループを続けます。

ドキュメントを参照することは常に役に立ちます;-)

continue ステートメントは、このステートメントが含まれる while、do、for、または foreach ステートメントの次の繰り返しに制御を渡します。

または — より包括的な — C# 言語仕様:

8.9.2 continue ステートメント

continue ステートメントは、最も近くにある while、do、for、または foreach ステートメントの新しい反復を開始します。

continue ステートメントのターゲットは、最も近い囲みの while、do、for、または foreach ステートメントの埋め込みステートメントの終点です。continue ステートメントが while、do、for、または foreach ステートメントで囲まれていない場合、コンパイル時エラーが発生します。

複数の while、do、for、または foreach ステートメントが互いに入れ子になっている場合、continue ステートメントは最も内側のステートメントにのみ適用されます。複数のネスト レベル間で制御を転送するには、goto ステートメント (§8.9.3) を使用する必要があります。

continue ステートメントは、finally ブロックを終了できません (§8.10)。continue ステートメントが finally ブロック内にある場合、continue ステートメントのターゲットは同じ finally ブロック内にある必要があります。そうしないと、コンパイル時エラーが発生します。

continue ステートメントは次のように実行されます。

  • continue ステートメントが、関連する finally ブロックを持つ 1 つ以上の try ブロックを終了する場合、制御は最初に、最も内側の try ステートメントの finally ブロックに転送されます。制御が finally ブロックの終点に到達すると、制御は次の外側の try ステートメントの finally ブロックに転送されます。このプロセスは、間にあるすべての try ステートメントの finally ブロックが実行されるまで繰り返されます。

  • 制御は、continue ステートメントのターゲットに転送されます。

continue ステートメントは無条件に制御を別の場所に移すため、continue ステートメントの終点に到達することはできません。

于 2013-01-07T22:17:28.463 に答える