Какие преимущества имеет использование var по сравнению с явным типом В C#? [дубликат]
Возможные Дубликаты:
в чем смысл ключевого слова var?
использование ключевого слова var в C#
Я понимаю, как IEnumerable<...>
для типа данных может сделать код немного менее читаемым или как вложенные дженерики могут показаться немного сложными. Но помимо удобочитаемости кода, есть ли преимущества в использовании var вместо явного типа? Похоже, используя явный тип, вам лучше передать, что переменная может потому что вы знаете, что это такое.
Если это стандарт кодирования на рабочем месте, я использую его для командной работы. Однако в моих собственных проектах я предпочитаю избегать пользователя var.
9 ответов
смысл var заключается в том, чтобы разрешить анонимные типы, без него они были бы невозможны, и именно поэтому он существует. Все остальные виды использования я считаю ленивым кодированием.
используя var
поскольку переменная итератора для блока foreach более безопасна для типов, чем явные имена типов. Например
class Item {
public string Name;
}
foreach ( Item x in col ) {
Console.WriteLine(x.Name);
}
этот код может компилироваться без предупреждений и по-прежнему вызывать ошибку выполнения. Это связано с тем, что цикл foreach работает с обоими IEnumerable
и IEnumerable<T>
. Первый возвращает значения, введенные как object
и компилятор C# просто выполняет кастинг на Item
под капотом для вас. Следовательно, это небезопасно и может привести к ошибкам выполнения, потому что IEnumerable
может содержать объекты любого типа.
С другой стороны, следующий код будет выполнять только одно из следующих
- не компилировать, потому что
x
набирается доobject
или другой тип, который не имеет имя поля / свойства - Compile и гарантированно не будет иметь ошибки выполнения при перечислении.
тип " x " будет object
в случае IEnumerable
и T
в случае IEnumerable<T>
. Нет кастинг выполняется компилятором.
foreach ( var x in col ) {
Console.WriteLine(x.Name);
}
Мне это нравится, особенно в модульных тестах, потому что по мере развития кода мне нужно только исправить правую сторону объявления/назначения. Очевидно, я также должен обновить, чтобы отразить изменения в использовании, но в момент объявления мне нужно сделать только одно изменение.
он не производит никакого значимого изменения в испускаемом IL. Это просто предпочтение стиля кода.
I, например, нравится, особенно при работе с типами, которые имеют длинные, общие, почти нечитаемые имена, такие как Dictionary<string, IQueryable<TValue1, TValue2>>[]
.
на var
- Это просто синтаксический сахар. Во время компиляции всегда известно, какой тип является переменной. Других преимуществ использования ключевого слова var нет.
нет никаких реальных различий. Некоторые люди предлагают использовать явный тип, потому что это может облегчить обслуживание кода. Однако люди, которые настаивают на var
имейте позицию, что "если мы используем var, мы вынуждены использовать хорошие соглашения об именах".
конечно, если вы используете vars с намерением иметь хорошие соглашения об именах, и это ломается, это более болезненно в будущем. (IMO)
public IAwesome { string Whatever { get; } }
public SoCool : IAwesome { public string Whatever { get; } }
public HeyHey
{
public SoCool GetSoCool() { return new SoCool(); }
public void Processy()
{
var blech = GetSoCool();
IAwesome ohYeah = GetSoCool();
// Now blech != ohYeah, so var is blech and ohYeah is IAwesome.
}
}
помимо аспекта читаемости, о котором вы упомянули, " var " также имеет преимущество уменьшения вероятности того, что тривиальное изменение кода нарушит другие части вашего кода. Например, при переименовании типа. Или если вы переключитесь на другой тип, который в основном совместим с первым типом (например, изменение с Foo[] на IEnumerable), у вас будет гораздо меньше работы, чтобы вернуть код в компилируемое состояние.
вы можете абстрагироваться от умственной сложности технических деталей, чтобы сосредоточиться исключительно на проблемной области вашей модели. вы должны убедиться, что ваши переменные названы осмысленно Тхо.