Microsoft не поощряет использование 'var' в C #? (VS2017)

15

Я смотрю на предстоящую Visual Studio 2017 .

В разделе « Повышенная производительность» есть образ Visual Studio, используемый для замены всех вхождений var явным типом.

увеличил производительность VS2017

В коде, очевидно, есть несколько проблем, которые Visual Studio определила как «требующие исправления».

Я хотел еще раз проверить мое понимание использования var в C #, поэтому я прочитал статью Эрика Липперта от 2011 года под названием « Использование и неправильное использование неявной типизации» .

Эрик говорит:

  • Используйте var, когда вам нужно; когда вы используете анонимные типы.
  • Используйте var, когда тип объявления очевиден из инициализатора, особенно если это создание объекта. Это устраняет избыточность.
  • Попробуйте использовать var, если код подчеркивает семантическую «бизнес-цель» переменной и преуменьшает «механические» детали ее хранения.
  • Используйте явные типы, если это необходимо для правильного понимания и поддержки кода.
  • Используйте описательные имена переменных независимо от того, используете ли вы «var». Имена переменных должны представлять семантику переменной, а не детали ее хранения; «DecimalRate» - это плохо; «InterestRate» - это хорошо.

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

var tweetReady = workouts [ ... ]

... потому что, возможно, это не на 100% сразу, какой это тип, но даже тогда я довольно быстро знаю, что это boolean.

Использование вар для этой части ...

var listOfTweets = new List<string>();

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

List<string> listOfTweets = new List<string>();

Хотя , исходя из того, что Эрик говорит , что переменная должна быть , вероятно , твитов , а не listOfTweets .

Какова будет причина для изменения всего varиспользования здесь? Что-то не так с этим кодом, который я пропускаю?

Роуэн Фриман
источник
Код на скриншоте - это именно то, что вы согласны не использовать var ... Уточнение?
Теластин
1
Я думаю, что все применения varздесь в порядке. Вы могли бы изменить один - но даже тогда я думаю, что это действительно не нужно. Зачем менять их все на явный тип?
Роуэн Фриман
2
Имейте в виду, что то, что очевидно для человека, не всегда очевидно для визуальной студии.
candied_orange
Все? У вас есть одна ошибка на скриншоте, которая явно связана с var.
Теластин
Ну, это не ошибка как таковая, а скорее предупреждение того вида, на который, как вы ожидаете, указывает линтер. Согласно изображению, все varsони были отмечены одинаково; с таким же предупреждающим крестиком рядом с ними и красным подчеркиванием. Предположительно Visual Studio хочет исправить их все одинаково. Если я не ошибаюсь.
Роуэн Фриман

Ответы:

26

TL; DR: нет, Microsoft не препятствует использованию 'var' в C #. Изображение просто не хватает контекста, чтобы объяснить, почему оно жалуется.

Если установить VS2017 RC и откройте панель Параметры и перейдите Text Editor -> C#, вы увидите новый раздел: Code Style. Это похоже на то, что ReSharper предлагал некоторое время: набор настраиваемых правил для стилей кодирования.

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

введите описание изображения здесь

Дэвид Арно
источник
3
Что такое по умолчанию? Если «заводская настройка» - «Предпочитать явный тип», то можно утверждать, что MS не рекомендует использовать var.
JacquesB
@JacquesB, значения по умолчанию, как показано на снимке экрана. Поскольку все они установлены на «Нет», трудно понять, активно ли «Предпочтительный явный тип» установлен в качестве предпочтительного способа MS, или это просто «нулевое значение». Насколько я понимаю, все лучшие разработчики одобряют var, поэтому меня не волнует, каково мнение MS по этому вопросу.
Дэвид Арно
6

Я думаю, вы слишком много читаете об этом. Итак, есть функция, которая позволяет вам заменить использование неявной типизации на явные аннотации типов, и вы делаете из этого вывод, что неявная типизация не рекомендуется. Существует также функция компиляции байт-кода C♯ в CIL. Не могли бы вы сделать вывод, что C♯ не рекомендуется, и мы все должны вместо этого писать байт-код CIL? Возможно нет.

Microsoft просто демонстрирует глубокое понимание IDE вашего кода. Он может даже написать ваши типы для вас без необходимости их прописать. Вот и все.

Это просто хороший пример демонстрации возможностей понимания кода в среде IDE. Он небольшой и автономный (в отличие от большого рефакторинга), он доступен во всех выпусках и применим ко всем разработчикам (в отличие от некоторых весьма впечатляющих архитектурных средств визуализации, которые доступны только в Ultimate и не применимы для значительной части потенциальных пользователей VS, у которых никогда не будет таких больших проектов), и хотя это очень просто (буквально делает то же самое csc.exe, что и с тех порvarбыл представлен), это, конечно, выглядит впечатляюще, особенно для тех, кто не совсем понимает неявную типизацию и вывод типов (или кто пытается гуглить «вывод типов» и перегружен такими терминами, как Хиндли-Милнер, объединение, возврат) Локальный вывод Си очень прост и понятен).

Итак, вкратце: это яркий способ продемонстрировать функцию IDE.

Йорг Миттаг
источник