This article has been localized into Russian by the community.
Неявно типизированные переменные (ключевое слово var)
Начиная с версии c# 3.0 можно использовать ключевое слово _var _ в левой части объявления переменной вместо явного объявления типа переменной. Это возможно только внутри метода, а не на уровне класса, где всегда необходимо указывать Тип. Давайте посмотрим, как это выглядит при использовании ключевого слова var:
int age = 42; // Explicitly typed variable
var name = "John Doe"; // Implicitly typed variable
Две переменные-одна объявлена с типом int, в то время как другая объявлена с ключевым словом var, вместо того, чтобы определить его как строку. Обратите внимание, что я назначаю значение в обоих случаях, потому что, хотя это не требуется при объявлении типа, это требуется при использовании ключевого слова var. Причина в том, что компилятор C# выведет тип из правой части оператора - он просто смотрит на то, что вы пытаетесь назначить переменной во время компиляции, а затем изменяет ключевое слово var на соответствующий тип.
Это также означает, что при использовании ключевого слова var не возникает никаких накладных расходов - это так же быстро во время выполнения, как и явно объявленная переменная, потому что это, по сути, то, что происходит, когда .NET framework выполняет ваш код.
Наш первый пример очень тривиален - не так много времени сэкономлено на написании "var "вместо " string". Однако иногда вы будете объявлять гораздо более сложные типы, либо как новую переменную, либо как локальный результат функции (определяемой пользователем или из платформы). В таком примере есть шанс сохранить достаточное количество нажатий клавиш:
Dictionary<int, List<string>> dict1 = new Dictionary<int, List<string>>();
var dict2 = new Dictionary<int, List<string>>();
Результат будет точно таким же, но вы определенно сохраните некоторые нажатия клавиш в последнем примере, и поскольку вы указываете Тип с правой стороны в обоих случаях, практически нет потери читаемости вашего кода при использовании в таком примере ключевого слова var.
Вы также можете использовать ключевое слово var при объявлении локальной переменной в результате вызова метода:
var s = DateTime.Now.ToString;
Опять же, это быстрее, и все еще довольно ясно, что происходит и какой тип будет содержать переменную (строку). Однако это может быть не в таком случае:
var myVar = SomeMethodWithANameWhichDoesntIndicateTheReturnType();
В такой ситуации не совсем ясно, что будет содержать переменная, и вы можете пожертвовать удобочитаемостью своего кода. Здесь можно рассмотреть возможность использования явно типизированной переменной.
Ключевое слово var & анонимные типы
До сих пор примеры, которые мы видели с ключевым словом var, были в основном из отдела "синтаксического сахара" - они хороши и короче для ввода, но на самом деле не являются требованием. Однако при работе с анонимными типами (подробнее о них позже) имеет смысл объявлять объекты с помощью ключевого слова var:
var myObj = new
{
Name = "John Doe",
Age = 42
};
Console.WriteLine(myObj.Name);
В этом случае вам действительно нужно ключевое слово var для последующего доступа к полям анонимного типа, как показано в этом примере.
Резюме
Ключевое слово var позволяет объявлять локальную переменную (внутри метода или цикла) без явного указания типа. Вместо этого компилятор C# выводит тип из правой части объявления. Это может быть очень удобно во многих ситуациях, но также может сделать код немного менее читаемым. Вы можете использовать его или придерживаться явного объявления типов переменных - что угодно, но вам это нужно для анонимных типов, как уже объяснялось.