10

これは実際には問題ではありませんが、私自身の手段では解決できなかった私の好奇心です。私は確かにそれで睡眠を失うことはありません。

VB.NET では、switch ステートメントの構文は次のとおりです (MSDN のドキュメントはこちら)。

Select [ Case ] testexpression
[ Case expressionlist
    [ statements ] ]
[ Case Else
    [ elsestatements ] ]
End Select

最初の行の は角括弧で囲まれていることに注意してくださいCase。これはオプションであることを意味します。

Case実際、次の例は、少なくとも私が試した初歩的な例にキーワードが含まれている場合と同じ方法でコンパイルおよび実行されます。

Select myIntVar
    Case 0
        Return "Nothing"
    Case 1
        Return "Just one"
    Case Else
        Return "Something else"
End Select

したがって、私の質問は次のとおりです。構文は別として、とで switch ステートメントを開くことに違いはありますか?SelectSelect Case

4

4 に答える 4

6

小さな実験をしました。次のような小さなコンソール アプリケーションを作成しました。

Module Module1

    Sub Main()
        Dim myStr As String = GetString(1)
    End Sub

    Private Function GetString(myIntVar) As String
        Select myIntVar
            Case 0
                Return "Nothing"
            Case 1
                Return "Just one"
            Case Else
                Return "Something else"
        End Select
    End Function

End Module

Case最初の実行は上の写真のとおりで、キーワードを挿入して再度コンパイルしました。ILDasm関数の IL を使用して作成した両方の実行可能ファイルを逆アセンブルGetStringし、このオンライン diff サイトに貼り付けました: http://www.diffchecker.com/9ef7z423

Select Case私には、単純な古いもののように見えSelectますが、純粋に構文の違いです (これはもちろんSelect、LINQ クエリでの使用を除外しています)。

于 2013-09-09T14:02:38.120 に答える
2

2つの形式に違いはないと言えます。しかし、私の唯一の証拠は、区別をつけていないということです。言語リファレンスを見るのではなく、言語仕様1を見るのが決定的な場所です。

バージョン 11 では、セクション 10.8.2 で Select Case ステートメントが説明されており、示されている構文は次のとおりです。

SelectStatement ::=
Select [ Case ] Expression StatementTerminator
[ CaseStatement + ]
[ CaseElseStatement ]
End Select StatementTerminator

したがって、このセクションが両方の形式をカバーしていることは明らかです。ただし、前の 5 つの段落 (Select Case ステートメントの仕様全体) では、2 つの形式を区別していません。

1参考文献は、説明的であり、例を示し、(ときどき) 緩い言葉を使用するように努めています。Visual Basic コンパイラを作成するには、仕様に準拠する必要があります。前者に欠けているものがあるとすれば、それはただの省略かもしれません。後者に何かが欠けている場合、それは公式には言語の一部ではありません。

于 2013-09-09T13:02:21.710 に答える
1

Select Caseこれは必須のVB 6.0に由来すると思います-Selectそれ自体は声明ではありませんでした。これは、VB.NET の個人的な好みに依存していることを意味します。

編集:奇妙なことに、それを省略することを選択した場合、Visual Studio はそれを自動的に追加します。

于 2013-09-10T10:09:27.560 に答える
0

たぶん、VB と C# などの言語間の構文の違いにすぎないのでしょう。

switch ステートメントでは、ループから抜け出すためにキーワード break が必要です。

違いに関しては、大きなことは何も考えられません...申し訳ありません。

于 2013-09-09T21:26:39.597 に答える