var (C# リファレンス)

C# 3 以降、メソッド スコープで宣言された変数には暗黙的な "型" var を与えることができます。 暗黙的に型指定されたローカル変数では、型を自分で宣言した場合と同様に厳密に型指定されますが、コンパイラが型を決定します。 次の 2 つの i の宣言は機能的に等しくなります。

var i = 10; // Implicitly typed.
int i = 10; // Explicitly typed.

重要

varnull 許容参照型を有効にして使用すると、式の型で null 値が許容されない場合でも、常に null 値を許容する参照型を表します。 コンパイラの null 状態分析により、潜在的な null 値の逆参照から保護されます。 null である可能性がある式に変数が割り当てられない場合、コンパイラから警告は生成されません。 null である可能性がある式に変数が割り当てる場合、警告が生成されないように、逆参照の前に null でないことをテストする必要があります。

var キーワードは、コンストラクターの呼び出し式と共に使用するのが一般的です。 var を使用すると、次の例に示すように、変数宣言およびオブジェクトのインスタンス化において型名を繰り返す必要がなくなります。

var xs = new List<int>();

C# 9.0 以降では、代替としてターゲット型の newを使用できます。

List<int> xs = new();
List<int>? ys = new();

パターン マッチングでは、var キーワードが var パターンで使用されます。

次の例は、2 つのクエリ式を示しています。 最初の式では、var の使用が許可されますが、必須ではありません。クエリ結果の型を IEnumerable<string> として明示的に指定できるためです。 一方、2 つ目の式の var では、匿名型のコレクションとしての結果が許され、その型の名前にはコンパイラ自体以外はアクセスできません。 var を使うと、結果のために新しいクラスを作成する必要がなくなります。 例 #2 では、foreach 繰り返し変数 item も暗黙的に型指定する必要があります。

// Example #1: var is optional when
// 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);
}

関連項目