次の方法で共有


式 (C# プログラミング ガイド)

式とは、1 つの値、オブジェクト、メソッド、または名前空間に評価できる、1 つ以上のオペランドと 0 個以上の演算子のシーケンスです。 式には、リテラル値、メソッドの呼び出し、演算子とそのオペランド、または簡易名を含めることができます。 簡易名には、変数、型のメンバー、メソッドのパラメーター、名前空間、または型の名前を指定できます。

式では、他の式をパラメーターとして使用する演算子や、他のメソッド呼び出しとなるパラメーターを持つメソッド呼び出しを使用できます。そのため、式には単純なものもあれば、非常に複雑なものもあります。 次に式の例を 2 つ示します。

((x < 10) && ( x > 5)) || ((x > 20) && (x < 25)) 
System.Convert.ToInt32("35")

式の値

ステートメントやメソッド パラメーターなど、式が使用されるコンテキストの大部分では、式はなんらかの値に評価されることが期待されます。 たとえば、x と y が整数である場合、式 x + y は数値に評価されます。 式 new MyClass() は、MyClass オブジェクトの新しいインスタンスへの参照に評価されます。 式 myClass.ToString() は、メソッドの戻り値の型である文字列に評価されます。 ただし、名前空間名については、分類上は式として扱われますが、値には評価されないため、式の最終結果になることはありません。 名前空間名は、メソッド パラメーターに渡すことはできません。また、新しい式で使用したり、変数に割り当てたりすることもできません。 名前空間名は、より大きい式の部分式としてのみ使用できます。 同じことが、型 (Type オブジェクトとは異なります)、メソッド グループ名 (特定のメソッドとは異なります)、およびイベント アクセサーである addremove にも当てはまります。

すべての値には、型が関連付けられています。 たとえば、x と y が両方とも型 int の変数である場合、式 x + y の値も int として型指定されます。 異なる型の変数に値が割り当てられた場合や、x と y の型が異なる場合は、型変換の規則が適用されます。 このような変換の動作方法の詳細については、「キャストと型変換 (C# プログラミング ガイド)」を参照してください。

オーバーフロー

値の型の最大値よりも値が大きくなると、数式でオーバーフローが発生することがあります。 詳細については、「Checked と Unchecked (C# リファレンス)」および「明示的な数値変換の一覧表 (C# リファレンス)」を参照してください。

演算子の優先順位と結合規則

式の評価方法は、結合規則と演算子の優先順位によって決まります。 詳細については、「演算子 (C# プログラミング ガイド)」を参照してください。

代入式とメソッドの呼び出し式を除き、ほとんどの式はステートメントに埋め込む必要があります。 詳細については、「ステートメント (C# プログラミング ガイド)」を参照してください。

リテラルと簡易名

式の中で最も単純なのがリテラルと簡易名の 2 つのタイプです。 リテラルは、名前を持たない定数値です。 たとえば、次のコード例の 5 と "Hello World" は共にリテラル値です。

// Expression statements. 
int i = 5;
string s = "Hello World";

リテラルの詳細については、「型 (C# リファレンス)」を参照してください。

前の例の i と s は、どちらもローカル変数を識別する簡易名です。 これらの変数を式で使用すると、変数名は、変数のメモリ位置に現在格納されている値に評価されます。 これを次の例に示します。

int num = 5;
System.Console.WriteLine(num); // Output: 5
num = 6;
System.Console.WriteLine(num); // Output: 6            

呼び出し式

次のコード例では、DoWork の呼び出しが呼び出し式です。

DoWork();

メソッドの呼び出しでは、メソッドの名前 (上の例のような名前、または別の式の結果としての名前) を使用し、その後にかっことメソッド パラメーターを記述する必要があります。 詳細については、「メソッド (C# プログラミング ガイド)」を参照してください。 デリゲートの呼び出しでは、デリゲートの名前とメソッド パラメーターをかっこで囲んで使用します。 詳細については、「デリゲート (C# プログラミング ガイド)」を参照してください。 メソッドの呼び出しとデリゲートの呼び出しは、メソッドが値を返す場合、メソッドの戻り値に評価されます。 void を返すメソッドは、式の値の代わりに使用できません。

クエリ式

一般的な式の規則と同じ規則がクエリ式に適用されます。 詳細については、「LINQ クエリ式 (C# プログラミング ガイド)」を参照してください。

ラムダ式

ラムダ式は、名前がないが入力パラメーターおよび複数のステートメントを持つことができる "インライン メソッド" を表します。 LINQ では、メソッドに引数を渡すために広く使用されています。 ラムダ式は、使用されるコンテキストに応じて、デリゲートまたは式ツリーにコンパイルされます。 詳細については、「ラムダ式 (C# プログラミング ガイド)」を参照してください。

式ツリー

式ツリーを使用すると、式をデータ構造体として表すことができます。 クエリ式を、SQL データベースなどの他のコンテキストで意味を持つコードに変換するために、LINQ プロバイダーにより広く使用されています。 詳細については、「式ツリー (C# および Visual Basic)」を参照してください。

解説

変数、オブジェクト プロパティ、またはオブジェクトのインデクサー アクセスが式によって識別されると、その項目の値が式の値として使用されます。 C# の式は、式が最終的に必要な型に評価される限り、値やオブジェクトが必要とされる任意の位置に配置できます。

参考書籍の該当する章

Variables and Expressions 入力 Beginning Visual C# 2010

参照

関連項目

メソッド (C# プログラミング ガイド)

デリゲート (C# プログラミング ガイド)

演算子 (C# プログラミング ガイド)

型 (C# プログラミング ガイド)

概念

C# プログラミング ガイド

LINQ クエリ式 (C# プログラミング ガイド)