15

C#プロジェクトとVB.NETプロジェクトをデバッグする場合、VS 2010のイミディエイトウィンドウの動作が異なることに気付きましたが、この違いに関する具体的なドキュメントは見つかりませんでした。

C#プロジェクトの場合、任意の式を入力するだけで、評価および表示されます。つまり、入力します。

foo.bar == "baz"

出力します

false

ただし、VB.NETでは、同じことを実行しても何も出力されません。

式を機能させるには、式の前に疑問符を付ける必要があります。

?foo.bar = "baz"

false

明確にするために編集し、上記の私の悪い例:

'1 + 2'などの単純な数学を含め、他のすべての式は同じ動作を示します。ただし、1 + 2の場合、「数値であるラベルの後にはコロンを付ける必要があります」というエラーが発生するため、エラーメッセージが異なる場合があります。

この動作を「修正」して、VB.NETイミディエイトウィンドウをC#のように動作させる方法はありますか??を入力する必要があります すべてのステートメントの前にそれを頻繁に使用する場合、苦痛になる可能性があります。

4

2 に答える 2

14

イミディエイトウィンドウのセマンティクスはまったく異なります。C#では、入力した式またはステートメントが評価され、評価の結果がウィンドウに出力されます。VB.NETでは、完全なステートメントを入力する必要があります。裸の表現を入力することはできません。あなたの例では、あなたが発見した?ように、ウィンドウに何かを印刷したい場合は、'Print'ステートメント(エイリアスは)を使用する必要があります。

この理由の1つは、言語のセマンティクスが異なることです。ボブ・カウフマンが述べたよう=に、代入演算子または等式テストになることができます。VB.NETウィンドウがc#ウィンドウのように機能する場合、a = b「bをaに割り当てる」か、「bがaと等しいかどうかを評価する」かどうかを判断する方法はありません。

VB.NETでは割り当てに値はありません。a = b = 4「bが4に等しいかどうかを評価し、その評価の結果をaに割り当てる」という意味です。これは、aがtrueまたはfalseのいずれかに等しいことを意味します。

C#では、割り当ても値を持つ式であるため、a = b = 4「値4をbに割り当て、式(b = 4)の値をaに割り当てる」ことを意味します。これは、aが4に等しくなることを意味します。

于 2011-11-17T00:02:10.197 に答える
5

?を使用しない場合、イミディエイトウィンドウパーサーはステートメントを予期します。指図。コマンド

foo.bar = "baz"

vb.netでは有効です。これは代入ステートメントであり、オブジェクトfooのbarフィールドまたはプロパティに値「baz」を与えます。ただし、 barがクラスのメソッドである場合は文句を言います。同様に、「1 +2」はvb.netの有効なステートメントではありません。コマンドは、インタプリタが式を評価することを意図していることを理解するのに役立ちます。=演算子を代入から比較演算子に変換するには、式が評価されていることをパーサーに理解させる必要があります。?必要。「1+2」の場合と同じように、vb.netステートメントパーサーは、ステートメントの先頭にある数値をステートメントラベルとして受け入れ、GoToに適合します。

C#言語は、任意の式も有効なステートメントである中括弧言語の標準に従います。したがって、「1 + 2」は、?の助けがなくても有効なステートメントとして解釈されます。これは、等式演算子(==)に個別の記号が必要な理由でもあります。そうでなければ、パーサーは代入ステートメントと式の違いを認識しません。

于 2011-11-17T00:17:39.210 に答える