logo
CSharp_Prog_Guide

Неявно типизированные локальные переменные

Локальным переменным вместо явного типа может быть задан определенный "тип" var. Ключевое слово var сообщает компилятору необходимости определения типа переменной из выражения, находящегося с правой стороны оператора инициализации. Определенный тип может быть встроенным, анонимным, определенным пользователем типом, типом, определенным в библиотеке классов, или любым выражением. Дополнительные сведения об инициализации массивов с var см. в разделе Неявно типизированные массивы.

В следующем примере показаны разные способы объявления локальных переменных с var.

---

Важно понять, что ключевое слово var не означает "вариант" и не указывает на свободную типизацию или позднюю привязку переменной. Оно просто значит, что компилятор определяет и назначает наиболее подходящий тип.

Ключевое слово var можно использовать в следующих контекстах:

using (var file = new StreamReader("C:\\myfile.txt")) {...}

var and Anonymous Types

In many cases the use of var is optional and is just a syntactic convenience. However, it is required when a variable is initialized with an anonymous type. This is a common scenario in LINQ query expressions.

Because the name of an anonymous type is known only to the compiler, you must use var in your source code. If a query variable has been initialized with var, then you must also use var as the type of the iteration variable in the foreach statement that iterates over the query variable.

class ImplicitlyTypedLocals2

{

static void Main()

{

string[] words = { "aPPLE", "BlUeBeRrY", "cHeRry" };

// If a query produces a sequence of anonymous types,

// then you must also use var in the foreach statement.

var upperLowerWords =

from w in words

select new { Upper = w.ToUpper(), Lower = w.ToLower() };

// Execute the query

foreach (var ul in upperLowerWords)

{

Console.WriteLine("Uppercase: {0}, Lowercase: {1}", ul.Upper, ul.Lower);

}

}

}

/* Outputs:

Uppercase: APPLE, Lowercase: apple

Uppercase: BLUEBERRY, Lowercase: blueberry

Uppercase: CHERRY, Lowercase: cherry

*/