var (справочник по C#)

Обновлен: Ноябрь 2007

Объявляемые в области метода переменные могут иметь неявный тип var. Локальная переменная с неявным типом имеет строгую типизацию, как если бы тип был задан явно, только тип определяет компилятор. Следующие два объявления i функционально являются эквивалентами:

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

Дополнительные сведения см. в разделах Неявно типизированные локальные переменные (Руководство по программированию в C#) и Связи типов в операциях запроса (LINQ).

Пример

В следующем примере показано два выражения запроса. В первом выражении использование типа var допустимо, но не обязательно, потому что тип результата запроса может быть задан явно как IEnumerable<string>. Однако во втором выражении использование типа var обязательно, потому что результатом является коллекция анонимных типов и имя этого типа является доступным только для компилятора. Обратите внимание, что в примере №2 foreach переменная итерации item должна также иметь неявный тип.

// 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);
}

См. также

Основные понятия

Руководство по программированию в C#

Ссылки

Неявно типизированные локальные переменные (Руководство по программированию в C#)

Другие ресурсы

Справочник по C#