var (Referenční příručka jazyka C#)
Počínaje jazykem C# 3 mohou mít proměnné deklarované v oboru metody implicitní "typ" var . Implicitně typovaná místní proměnná je silného typu stejně, jako byste deklarovali typ sami, ale kompilátor určuje typ. Následující dvě deklarace jsou i funkčně ekvivalentní:
var i = 10; // Implicitly typed.
int i = 10; // Explicitly typed.
Důležité
Při použití s povolenými typy odkazů s možnou hodnotou null vždy implikuje odkaz s možnou hodnotou null i v případě, že typ výrazu var není nullable. Analýza stavu null kompilátoru chrání před přesměrováním potenciální null hodnoty. Pokud proměnná není nikdy přiřazena výrazu, který může mít hodnotu null, kompilátor nevygeneruje žádná upozornění. Pokud přiřadíte proměnnou výrazu, který může mít hodnotu null, musíte před přesměrováním přesměrování otestovat, že proměnná není null, abyste se vyhnuli upozorněním.
Klíčové slovo se běžně používá var u výrazů volání konstruktoru. Použití umožňuje neopakovat název typu v deklaraci proměnné a vytvoření instance objektu, jak var je znázorněno v následujícím příkladu:
var xs = new List<int>();
Počínaje jazykem C# 9.0 můžete jako new alternativu použít výraz typu target:
List<int> xs = new();
List<int>? ys = new();
Při porovnávání vzorů se var klíčové slovo používá ve var vzoru.
Příklad
Následující příklad ukazuje dva výrazy dotazu. V prvním výrazu je použití povoleno, ale není povinné, protože typ výsledku dotazu lze explicitně zadat var jako IEnumerable<string> . Ve druhém výrazu však umožňuje, aby výsledek byl kolekcí anonymních typů a název tohoto typu není přístupný s výjimkou var samotného kompilátoru. Použití var eliminuje požadavek na vytvoření nové třídy pro výsledek. Všimněte si, že v příkladu č. 2 musí být foreach proměnná iterace item také implicitně typována.
// 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);
}