Какие преимущества дает использование var по сравнению с явным типом в C #? [duplicate]

11
задан Community 23 May 2017 в 11:33
поделиться

9 ответов

Смысл var в том, чтобы разрешить анонимные типы, без него они были бы невозможны, и именно по этой причине он существует. Все остальные варианты использования я считаю ленивым кодированием.

18
ответ дан 3 December 2019 в 01:15
поделиться

Помимо упомянутого вами аспекта удобочитаемости, 'var' также имеет преимущество уменьшения вероятности того, что простое изменение кода нарушит другие части вашего кода. Если вы переименуете тип, например. Или, если вы переключитесь на другой тип, который в основном совместим с предыдущим типом (например, переход с Foo [] на IEnumerable), у вас будет гораздо меньше работы, чтобы вернуть свой код обратно в компилируемое состояние.

0
ответ дан 3 December 2019 в 01:15
поделиться

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

0
ответ дан 3 December 2019 в 01:15
поделиться

Использование var в качестве переменной итератора для блока foreach является более безопасным по типу, чем явные имена типов. Например,

class Item {
  public string Name; 
}
foreach ( Item x in col ) {
  Console.WriteLine(x.Name);
}

Этот код может компилироваться без предупреждений и по-прежнему вызывать ошибку приведения во время выполнения. Это связано с тем, что цикл foreach работает как с IEnumerable , так и с IEnumerable . Первый возвращает значения, набранные как объект , а компилятор C # просто выполняет приведение к Item за вас. Следовательно, это небезопасно и может привести к ошибкам выполнения, поскольку IEnumerable может содержать объекты любого типа.

С другой стороны, следующий код выполнит только одно из следующих

  1. Не компилируется, потому что x типизирован для объекта или другого типа, у которого нет поля имени / property
  2. Компилировать и гарантировать отсутствие ошибки приведения во время выполнения при перечислении.

Типом «x» будет объект в случае IEnumerable и T в случае IEnumerable . Компилятор не выполняет преобразование.

foreach ( var x in col ) {
  Console.WriteLine(x.Name);
}
8
ответ дан 3 December 2019 в 01:15
поделиться

Мне это нравится, особенно в модульных тестах, потому что по мере развития кода мне нужно только исправить правую часть объявления/назначения. Очевидно, что я также должен обновить, чтобы отразить изменения в использовании, но в момент объявления мне нужно внести только одно изменение.

8
ответ дан 3 December 2019 в 01:15
поделиться

Он не производит значимых изменений в излучаемом IL. Это просто предпочтение стиля кода.

Мне, например, это нравится, особенно когда речь идет о типах, которые имеют длинные, общие, почти нечитаемые имена, такие как Dictionary>[].

4
ответ дан 3 December 2019 в 01:15
поделиться

Никаких реальных различий нет. Некоторые предлагают использовать явный тип, потому что это может упростить сопровождение кода. Однако люди, которые настаивают на var , придерживаются позиции, что «если мы используем var, мы вынуждены использовать хорошие соглашения об именах».

Конечно, если вы используете vars с намерением иметь хорошие соглашения об именах, а это ломается, в будущем это будет более болезненно.(IMO)

2
ответ дан 3 December 2019 в 01:15
поделиться

var - это просто синтаксический сахар. Во время компиляции всегда известно, к какому типу относится переменная. Других преимуществ использования ключевого слова var нет.

2
ответ дан 3 December 2019 в 01:15
поделиться
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.
    }
}
1
ответ дан 3 December 2019 в 01:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: