var (C# リファレンス)var (C# Reference)

Visual C# 3.0 以降、メソッド スコープで宣言された変数には暗黙的な "型" var を与えることができます。Beginning in Visual C# 3.0, variables that are declared at method scope can have an implicit "type" var. 暗黙的に型指定されたローカル変数では、型を自分で宣言した場合と同様に厳密に型指定されますが、コンパイラが型を決定します。An implicitly typed local variable is strongly typed just as if you had declared the type yourself, but the compiler determines the type. 次の 2 つの i の宣言は機能的に等しくなります。The following two declarations of i are functionally equivalent:

var i = 10; // implicitly typed  
int i = 10; //explicitly typed  

詳しくは、「暗黙的に型指定されるローカル変数」および「LINQ クエリ操作での型の関係」をご覧ください。For more information, see Implicitly Typed Local Variables and Type Relationships in LINQ Query Operations.

Example

次の例は、2 つのクエリ式を示しています。The following example shows two query expressions. 最初の式では、var の使用が許可されますが、必須ではありません。クエリ結果の型を IEnumerable<string> として明示的に指定できるためです。In the first expression, the use of var is permitted but is not required, because the type of the query result can be stated explicitly as an IEnumerable<string>. しかしながら、2 つ目の式では、var を使用する必要があります。結果が匿名型の集まりであり、その型の名前にはコンパイラ自体以外はアクセスできないためです。However, in the second expression, var must be used because the result is a collection of anonymous types, and the name of that type is not accessible except to the compiler itself. 例 #2 では、foreach 繰り返し変数 item も暗黙的に型指定する必要があります。Note that in Example #2, the foreach iteration variable item must also be implicitly typed.

// Example #1: var is optional because
// the select clause specifies a string
string[] words = { "apple", "strawberry", "grape", "peach", "banana" };
var wordQuery = from word in words
                where word[0] == 'g'
                select word;

// Because each element in the sequence is a string, 
// not an anonymous type, var is optional here also.
foreach (string s in wordQuery)
{
    Console.WriteLine(s);
}

// Example #2: var is required because
// the select clause specifies an anonymous type
var custQuery = from cust in customers
                where cust.City == "Phoenix"
                select new { cust.Name, cust.Phone };

// var must be used because each item 
// in the sequence is an anonymous type
foreach (var item in custQuery)
{
    Console.WriteLine("Name={0}, Phone={1}", item.Name, item.Phone);
}

関連項目See Also

C# リファレンスC# Reference
C# プログラミング ガイドC# Programming Guide
暗黙的に型指定されるローカル変数Implicitly Typed Local Variables