Почему Resharper хочет, чтобы вы изменили большинство переменных на тип var вместо фактического типа в коде?
Resharper: vars
Ответы (8)
Это просто вариант. Вы можете отключить его:
ReSharper -> Параметры -> Проверка кода -> Уровень серьезности проверки -> Повторяемость кода -> Используйте ключевое слово 'var', где это возможно: измените его на "Не показывать"
Также есть опция контекста (лампочка), которая проведет вас в каждом направлении - это в ReSharper -> Параметры -> Языки -> C # -> Действия контекста -> «Заменяет явное объявление типа на 'var'»
Я видел видео от Хади Харири, где он представлял Resharper 6.x. Его аргументация заключалась в том, что если вы заставляете пользователя использовать «var», вы фактически заставляете его называть переменную более осмысленным способом, таким образом, все имена читабельны и имеют больше смысла.
По умолчанию это будут объявления этого типа "зеленой волнистой линией":
Person p = new Person();
^^^^^^
Из-за повторения.
Он также предложит (маленькое зеленое подчеркивание) var, когда его можно вывести:
Person p = repository.GetPerson(1);
¯¯¯
В этом случае он может быть передан из-за типа возвращаемого значения метода GetPerson.
Как заявил Джон Скит, вы можете отключить эти предложения в параметрах resharper.
Чтобы ответить на ваш вопрос ... потому что кто-то в JetBrains решил, что это «предпочтительный» способ.
Чтобы изменить это, следуйте ответу Джона. Кроме того, вы также можете изменить поведение ReSharper при очистке кода (которую я часто использую) в разделе «Очистка кода» в параметрах ReSharper. Установите "Использовать явный тип".
var v = ...
:)
- person Noctis; 25.07.2014
Это объяснение этого вики-страницы по проверке кода 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>()
, чтобы сэкономить место.
Я думаю, это предлагает вам оба пути. Если у вас есть явный тип - вы можете изменить его на var. Если у вас есть var - можете поменять на явный. Просто для того, чтобы вам было быстрее измениться, если вы, конечно, считаете это уместным.
Было бы хорошо использовать переменные, например, для переменных цикла, при итерации коллекции и т. Д., Когда тип для вас «неявный» (он, конечно, всегда неявный для компилятора, когда Resharper предлагает это) и его отсутствие не делает код менее читаемым. Кроме того, мне нравится сокращать некоторые объявления, которые могут стать довольно длинными с обобщениями. Например, IList (IDictionary (SomeType)) myVar = List (IDictionary (SomeType)) () не сильно потеряет, если вы напишете «var» в левой части присваивания.
(Заменить скобки угловыми скобками;)
Конечно, я бы попытался использовать vars осторожно, чтобы улучшить читаемость, а не наоборот.
SomeCode<int>
.
- person mackenir; 17.11.2008
Для меня это определенно стоит своей цены ... (даже если мне пришлось бы заплатить самому). Но это может замедлить работу VS. Это может стать очень медленным, если у вас есть файлы вроде 5000 строк кода.
Однако я до сих пор не понимаю, почему я единственный в команде, который его использует ...
Переменные помогают сделать код более читаемым внутри метода, особенно если вы используете дженерики.
Как говорит Джон, это всего лишь вариант.
Status satus = foo.DoSomething()
. Запись с помощью var
скрывает фактический тип возвращаемого значения и делает его более нечитаемым. status
может быть любым, например int.
- person Razer; 25.04.2013