C# および F# の式

マネージ式エバリュエーターでは、C# で記述されたほとんどの式を評価できます。

ただし、マネージ式エバリュエーターでは、F# の式は認識されません。 F# をデバッグする場合は、デバッガー ウィンドウまたはダイアログ ボックスに式を入力する前に、式を C# の構文に変換する必要があります。 式を F# から C# に変換するときは、C# では等価をテストするのに == 演算子を使用しますが、F# では単一の = を使用することに注意してください。

次に示すトピックでは、サポートされている式について詳細に説明します。サポートされていない式の種類または部分的にサポートされている式の種類についても説明します。

  • キャスト

  • 動的オブジェクト

  • 識別子と型

  • メソッドの評価

  • 演算子

  • オーバーロードされた演算子

  • プロパティの評価

  • 文字列

  • typeof 演算子と sizeof 演算子

  • WebMethods

  • 式エバリュエーターは、public、protected、internal、および private アクセス修飾子を無視します。 たとえば、[ウォッチ] ウィンドウから private メソッドを呼び出すことができます。 式エバリュエーターはアクセス修飾子を無視するため、予期しない読み込みが発生する可能性があります。

式エバリュエーターは、実行対象のコードが安全かどうかにかかわらず、暗黙的な unsafe コンテキストのすべての評価を実行します。

また、式エバリュエーターは checked ブロックと /checked コンパイラ オプションも無視します。 すべての式が unchecked コンテキストで評価されます。

属性を使用すると、カスタム データ型の表示をカスタマイズできます。 詳細については、「カスタム データ型の表示」を参照してください。

キャスト

デバッガーでは、簡単なキャスト式を使用できます。

(A)x

ポインターを含むキャストは使用できません。

動的オブジェクト

式エバリュエーターは、動的として静的に型指定された変数を評価できます。 さらに、IDynamicObject インターフェイスを実装するオブジェクトも評価できます。 IDynamicObject インターフェイスを実装するオブジェクトがウォッチ ウィンドウで評価されると、[動的ビュー] ノードが追加されます。 [動的ビュー] ノードにはオブジェクトのメンバーが表示されますが、そのメンバーの値を編集することはできません。

動的オブジェクトでは、以下の機能はサポートされていません。

  • 複合演算子 +=、-=、%=、/=、および *=

  • 多数のキャスト (数値キャスト、型引数キャストなど)

  • 3 つ以上の引数を指定したメソッド呼び出し

  • 3 つ以上の引数を指定したプロパティの getter

  • 引数を指定したプロパティの setter

  • インデクサーへの割り当て

  • ブール演算子 && および ||

識別子と型

デバッガー式には、現在のスコープで参照できるどの識別子でも使用できます。 たとえば、デバッガーが Magh メソッドで停止した場合、定数、変数名、メソッド名など、Magh で参照できるどの識別子でも使用できます。

デバッガーでは、プリミティブ型、列挙型 (Enum)、または組み込みの型のどの変数でも正しく表示できます。 クラス型の変数については、最派生型に基づいた値を正しく表示できます。 Cat 型から派生した Lion 型の leo オブジェクトがある場合、leo.Claws を評価し、Lion 型のオブジェクトの正しい値を取得できます。

左辺値である左側の式には、新しい値を割り当てることができます。 これには、プリミティブ型、クラス型、および System.Object 型が含まれます。

メソッドの評価

デバッガーは、オーバーロードされたメソッドも含め、メソッドの評価をサポートしています。 したがって、次のいずれかの式を入力すると、オーバーロードされたメソッドの中から正しいメソッドが呼び出されます。

Time.Set();
Time.Set(atime);

デバッガーは、メソッドを評価するときに、そのメソッドのコードを実際に呼び出して実行します。 メソッドに副作用がある場合、デバッガー ウィンドウでメソッドを評価するとプログラムの状態が変化するため、予期しない結果になる可能性があります。

オーバーロードされたメソッドにブレークポイントを設定する場合、ブレークポイントの位置はメソッドの指定方法によって変わります。 シグネチャ全体 (メソッド名とすべての引数のリスト) を指定した場合は、指定されたオーバーロードに 1 つのブレークポイントが設定されます。 メソッド名のみを指定すると、デバッガーの動作は、Visual Studio のオプション設定によって変わります。 [関数名の確認に IntelliSense を使用する] チェック ボックスをオフにすると、そのメソッド名の各オーバーロードに、1 つのブレークポイントが設定されます。 それ以外の場合は、[ブレークポイントの選択] ダイアログ ボックスが開き、ブレークポイントを配置するオーバーロードを指定できます。 詳細については、「ブレークポイントとトレースポイントの使用」を参照してください。

新しい匿名メソッドの作成は、このバージョンの Visual Studio のデバッガーではサポートされていません。

演算子

デバッガーは、次の演算子を含む大部分の組み込み演算子を正しく評価します。

  • 関係演算子と等値演算子: (expr1> expr2、expr1< expr2、expr1<= expr2、expr1=> expr2、expr1== expr2、expr1!= expr2)

  • ブール演算子: (expr1&& expr2、expr1|| expr2、expr1? expr2: expr3)

  • 算術演算子: (expr1+ expr2、expr1- expr2、expr1* expr2、expr1/ expr2、expr1% expr2)

  • 論理演算子: (expr1& expr2、expr1^ expr2、expr1| expr2 ).

  • シフト演算子: (expr1>> expr2、expr1<< expr2)

  • 代入演算子: (lvalue= expr2、lvalue*= expr2、lvalue/= expr2、lvalue%= expr2、lvalue+= expr2、lvalue-= expr2、lvalue<<= expr2、lvalue>>= expr2、lvalue&= expr2、lvalue^= expr2、lvalue|= expr2)

  • 単項演算子: (+expr1、- expr1、expr1++、++expr1、expr1--、--expr1)

オーバーロードされた演算子

デバッガーでは、オーバーロードされた演算子の大部分を使用できます。

オーバーロードされた挿入演算子 +、-、/、%、および & は使用できます。

  • expr1 + expr2

  • expr1 - expr2

  • expr1 / expr2

  • expr1 % expr2

  • expr1 & expr2

オーバーロードされた挿入演算子 =、&&、&、および || は使用できません。

  • expr1 = expr2

  • expr1 && expr2

  • expr1 & expr2

  • expr1 || expr2

オーバーロードされた挿入演算子 << および >> は、どちらのオペランドもクラス変数の場合に機能しません。

  • object1 <<object2

  • object1 >> object2

オーバーロードされた前置演算子 +、-、++、--、!、および ~ は使用できます。

  • + expr1

  • - expr1

  • ++ expr1

  • -- expr1

  • ! expr1

  • ~ expr1

オーバーロードされた後置演算子 ++ および -- は使用できます。

  • expr1 ++

  • expr1 --

オーバーロードされたインデクサーは機能します。

  • expr1 [ expr2 ]

プロパティの評価

デバッガーは、どの変数ウィンドウでもプロパティを評価できます。 ただし、デバッガーでプロパティを評価すると、予測不可能な結果や望ましくない結果が生じる場合があります。 予定外の評価によるそのような結果が発生しないようにするには、[オプション] ダイアログ ボックスでプロパティ評価をオフにします。

文字列

デバッガーでは、配列のインデックス演算子だけでなく、文字列のインデックス演算子も認識されます。 たとえば、次のように入力できます。

"hello world"[0]

[ウォッチ] ウィンドウに、正しい値が表示されます。

'h'

C# では、ネイティブな C/C++ と異なり、デバッガーで文字列の値を編集できます。 さらに、文字列で Length 演算子を使用できます。

mystring.Length 

または

"hello world".Length

C# では、文字列を連結できます。

"hello" + "world"

typeof 演算子と sizeof 演算子

デバッガーでは、typeof 演算子と sizeof 演算子を使用できます。これらの演算子は、対応する .NET Framework の関数に変換されて使用されます。

typeof ( expression )

これは次のように変換されます。

System.Type.GetType( expression )

デバッガーは、変換後の式を評価します。

デバッガーでは、sizeof 演算子がサポートされています。

WebMethods

デバッガー ウィンドウで WebMethods を呼び出すことはできません。

参照

その他の技術情報

デバッガー内の式

C# リファレンス