方法 : クエリ式で暗黙的に型指定されるローカル変数および配列を使用する (C# プログラミング ガイド)
コンパイラによってローカル変数の型が決定されるようにする場合は、暗黙的に型指定されたローカル変数を使用できます。 クエリ式でよく使用する匿名型を格納するには、暗黙的に型指定されたローカル変数を使用する必要があります。 以下の例では、クエリで暗黙的に型指定されたローカル変数を省略できる場合と、使用しなければならない場合の両方を示します。
暗黙的に型指定されたローカル変数は、var コンテキスト キーワードを使用して宣言します。 詳細については、「暗黙的に型指定されるローカル変数 (C# プログラミング ガイド)」および「暗黙的に型指定される配列 (C# プログラミング ガイド)」を参照してください。
使用例
次の例は、var キーワードが必須である一般的なシナリオ (匿名型のシーケンスを生成するクエリ式) を示しています。 このシナリオでは、匿名型の型名にアクセスできないため、var を使用して foreach ステートメントのクエリ変数と反復変数を暗黙的に型指定する必要があります。 匿名型の詳細については、「匿名型 (C# プログラミング ガイド)」を参照してください。
private static void QueryNames(char firstLetter)
{
// Create the query. Use of var is required because
// the query produces a sequence of anonymous types:
// System.Collections.Generic.IEnumerable<????>.
var studentQuery =
from student in students
where student.FirstName[0] == firstLetter
select new { student.FirstName, student.LastName };
// Execute the query and display the results.
foreach (var anonType in studentQuery)
{
Console.WriteLine("First = {0}, Last = {1}", anonType.FirstName, anonType.LastName);
}
}
次の例では、同様の状況で var キーワードを使用しています。ただし、この場合、var は省略可能です。 student.LastName は文字列であるため、クエリを実行すると文字列のシーケンスが返されます。 したがって、queryID の型は、var ではなく System.Collections.Generic.IEnumerable<string> として宣言できます。 var キーワードは利便性のために使用されます。 この例では、foreach ステートメントの反復変数は文字列として明示的に型指定されていますが、代わりに var を使用して宣言することもできます。 反復変数の型は匿名型ではないため、var の使用は省略可能であり、必須ではありません。 var 自体は型ではなく、型を推論して割り当てるようコンパイラに指示する命令です。
// Variable queryID could be declared by using
// System.Collections.Generic.IEnumerable<string>
// instead of var.
var queryID =
from student in students
where student.ID > 111
select student.LastName;
// Variable str could be declared by using var instead of string.
foreach (string str in queryID)
{
Console.WriteLine("Last name: {0}", str);
}