コンパイラでローカル変数の型を決定する場合は常に、暗黙的に型指定されたローカル変数を使用できます。 クエリ式でよく使用される匿名型を格納するには、暗黙的に型指定されたローカル変数を使用する必要があります。 次の例は、クエリで暗黙的に型指定されたローカル変数の省略可能な使用と必要な使用の両方を示しています。
暗黙的に型指定されたローカル変数は、 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: {str}");
}
こちらもご覧ください
.NET