クエリ式で暗黙的に型指定されるローカル変数および配列を使用する方法 (C# プログラミング ガイド)
コンパイラによってローカル変数の型が決定されるようにする場合は、暗黙的に型指定されたローカル変数を使用できます。 クエリ式でよく使用する匿名型を格納するには、暗黙的に型指定されたローカル変数を使用する必要があります。 以下の例では、クエリで暗黙的に型指定されたローカル変数を省略できる場合と、使用しなければならない場合の両方を示します。
暗黙的に型指定されたローカル変数は、var コンテキスト キーワードを使用して宣言します。 詳細については、「暗黙的に型指定されるローカル変数」と「暗黙的に型指定される配列」を参照してください。
例
次の例は、var
キーワードが必須である一般的なシナリオ (匿名型のシーケンスを生成するクエリ) を示しています。 このシナリオでは、匿名型の型名にアクセスできないため、var
を使用して foreach
ステートメントのクエリ変数と反復変数の両方を暗黙的に型指定する必要があります。 匿名型の詳細については、「匿名型」を参照してください。
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);
}
関連項目
.NET