Решайер: vars

Почему Resharper хочет, чтобы вы меняли большинство переменных на тип var вместо фактического типа в коде?

Ответ 1

Это просто вариант. Вы можете отключить его:

ReSharper → Опции → Проверка кода → Уровень проверки → Кодовые избыточности → Используйте ключевое слово "var", где это возможно: измените это на "Не показывать"

Также есть опция context (lightbulb), которая приведет вас в каждом направлении - это находится в ReSharper → Параметры → Языки → С# → Контекстные действия → "Заменяет объявление явного типа на" var "

Ответ 2

Я увидел видео от Хади Харири, где он представил Решарпера 6.x. Его аргументация заключалась в том, что, если вы заставляете пользователя использовать "var", вы на самом деле вынуждаете его использовать переменную более значимым образом, таким образом все имена читабельны и имеют больше смысла.

Ответ 3

По умолчанию для этого типа будут отображаться объявления "зеленого цвета":

Person p = new Person();
^^^^^^

Из-за повторения.

Он также предложит (небольшое зеленое подчеркивание) var, когда это можно сделать:

Person p = repository.GetPerson(1);
¯¯¯

В этом случае он может быть выведен из-за возвращаемого типа метода GetPerson.

Как заявил Джон Скит, вы можете отключить эти предложения в вариантах resharper.

Ответ 4

Чтобы ответить на ваш вопрос... потому что кто-то из JetBrains решил, что это был "предпочтительный" способ.

Чтобы изменить это, следуйте за Джоном. Кроме того, вы можете изменить поведение ReSharper при выполнении Code Cleanup (который я использую много) в разделе "Очистка кода" в параметрах ReSharper. Установите значение "Использовать явный тип".

Ответ 5

Это объяснение в вики-версии проверки кода JetBrains: http://confluence.jetbrains.net/display/ReSharper/Use+%27var%27+keyword+when+initializer+explicitly+declares+type

Если вы видите класс справа, нет большой необходимости видеть его и слева. Также он экономит место и уменьшает код, если имя класса довольно длинное. Лично я не использую var для простых типов, таких как string, int и т.д., Но использовать его для чего-то вроде var dictionary = new Dictionary<string, int>() для экономии места.

Ответ 6

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

Возможно, полезно использовать vars, например, для переменных цикла, при повторении коллекции и так далее, когда тип "неявный" для вас (он всегда подразумевается для компилятора, конечно, когда Resharper предлагает это) и его отсутствие не делает код менее удобочитаемым. Кроме того, мне нравится сокращать некоторые декларации, которые могут расти довольно долго с дженериками. Например, IList (IDictionary (SomeType)) myVar = List (IDictionary (SomeType))() не сильно потеряет, если вы напишете "var" в левой части задания.

(Заменить скобки скобками;)

Конечно, я бы старался использовать vars с осторожностью, чтобы улучшить читаемость, а не наоборот.

Ответ 7

Для меня это определенно стоит цена... (даже если бы я сам должен был заплатить). Но это может замедлить ваш VS. Он может стать очень медленным, если у вас есть файлы, например, 5000 строк кода.

Однако я все еще не понимаю, почему я единственный в команде, использующей его...

Ответ 8

Vars помогает сделать код более читаемым внутри метода, особенно если вы используете generics.

Как говорит Джон, это просто вариант.