Содержание
Часто, при исследовании кода C# можно встретить рядом с переменной не её тип, например, int
, string
и т.д., а ключевое слово var
. В зависимости от контекста, ключевое слово var
может использоваться в C# в двух случаях, которые мы рассмотрим в этой части
Что означает var в C#?
Ключевое слово var
может означать то, что перед нами неявно типизированная переменная, либо то, что перед нами анонимный тип. Неявно типизированные переменные и анонимные типы появились в C# 3.0 и активно используются в программировании. В некоторых случаях, ключевое слово var
позволяет нам значительно сократить объявление переменной и сделать код более лаконичным и понятным.
Неявно типизированные переменные
Язык C# — это язык со статической (строгой) типизацией. Тип переменной определяется один раз на этапе объявления переменной и не может изменяться в последствии.
Неявно типизированная переменная — это переменная, тип которой выводится компилятором, исходя из выражения, стоящего справа от переменной. Например,
var i = 1; //тип переменной int var s = "string"; //тип переменной string
Чтобы убедиться, что переменным i
и s
действительно присвоен соответствующий их значениям тип, достаточно в Visual Studio навести курсор на ключевое слово var
:

Изменить тип переменной мы не можем. Например, следующий код приведет к ошибке:
var s = "string"; //тип переменной string s = 2;
Таким образом, использование неявно типизированных переменных в C# позволяет сократить количество ввода. Ни смены типа переменной в процессе выполнения приложения, ни каких-либо других возможностей, в данном случае, мы не получаем. При этом, забегая немного вперед, стоит отметить, что при использовании того же LINQ, часто бывает намного проще использовать ключевое слово var
для объявления переменной, чем выписывать её тип самостоятельно.
Где могут использоваться неявно типизированные переменные (var)?
Использование неявно типизированных переменных имеет свои ограничения. Например, мы можем использовать неявно типизированные переменные в качестве локальных переменных в методах. Также, мы можем использовать их в циклах:
for (var i = 1; i < 10; i++) { Console.WriteLine(i); }
В данном случае, справа от var i
стоит число 1
, что позволяет компилятору вывести тип (int
) и выполнить цикл. В цикле foreach
также допустимо использование var
:
var list = new List<string>(); list.Add("Привет"); list.Add("мир"); foreach (var item in list) { Console.WriteLine(item); }
Здесь в цикле тип переменной item
определен, исходя из типа элементов в списке (string
).
Где запрещено использование неявно типизированных переменных (var)?
Неявно типизированные переменны запрещено использовать:
1) в качестве возвращаемого методом результата:
public var Method() { }
3) в параметрах методов:
public void Method(var i) { }
3) в свойствах классов:
public class MyClass { public var Name { get; set; } }
Во всех приведенных выше случаях мы получим ошибку:
4) в выражениях, где тип переменной невозможно определить
Например, в выражении ниже:
var n = null;
в итоге, получим ошибку:
Анонимные типы
Анонимный тип — это тип имя которого создается компилятором и недоступно на уровне исходного кода. Отсюда, видимо и название — «анонимный тип», т.е. тип, не имеющий названия для использования в исходном коде. Использование анонимных типов — это тот самый момент, когда использование ключевого слова var
не только оправдано, но и является единственно возможным.
Анонимный тип создается с использованием ключевого слова new
:
var anon = new { Name = "Вася", Age = 25 }; Console.WriteLine($"Имя {anon.Name} Возраст {anon.Age}");
Все свойства анонимных типов доступны только для чтения. Например, мы не можем написать так:
var anon = new { Name = "Вася", Age = 25 }; anon.Name = "Петя";
Анонимные типы активно используются при работе с LINQ. Например, при создании проекций с использованием методов Select
или SelectMany
. Также, анонимный тип пожет использоваться в случае, когда необходимо использовать какой-либо объект, инкапсулирующий набор свойств, в узком контексте или же вообще единожды в коде. Создавать для этого отдельный тип данных — излишне.
Итого
Ключевое слово var
может использоваться в двух случаях: для определения неявно типизированной переменной и для определения анонимного типа. При этом, единственно необходимым случаем использования var является второй случай — для анонимного типа, имя которого недоступно из исходного кода. В случае же неявно типизированных переменных var
используется не более, чем синтаксическое удобство, позволяющее сделать код более кратким.