Почему ReSharper хочет использовать 'var' для всего?

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

watch --interval=10 lynx -dump http://dslrouter/stats.html
206
задан MasterMastic 29 January 2013 в 08:46
поделиться

10 ответов

Одна из причин - улучшенная читаемость. Что лучше?

Dictionary<int, MyLongNamedObject> dictionary = new Dictionary<int, MyLongNamedObject>();

или

var dictionary = new Dictionary<int, MyLongNamedObject>();
184
ответ дан 23 November 2019 в 04:46
поделиться

Технической разницы нет, если вы используете var, тип подразумевается компилятором. Если у вас есть такой код:

var x = 1;

x подразумевается как int, и никакие другие значения не могут быть присвоены ему.

Ключевое слово var полезно, если вы изменяете тип переменной; тогда вам нужно будет внести только одно изменение вместо двух:

var x = 1; --> var x = "hello";
int x = 1; --> string x = "hello";
2
ответ дан 23 November 2019 в 04:46
поделиться

Функция var в .Net 3.0 - это просто вывод типа , который является типобезопасным и часто упрощает чтение кода. Но вам это не обязательно, и вы можете отключить эту рекомендацию в resharper, если хотите.

5
ответ дан 23 November 2019 в 04:46
поделиться

Ключевое слово var было введено в C # 3.0 - оно позволяет нам забыть о явном указании нашего типа.

Нет реальной разницы в том, используете ли вы

] MyObject foo = DB.MyObjects.SingleOrDefault (w => w.Id == 1);

или

var foo = DB.MyObjects.SingleOrDefault (w => w.Id == 1);

за исключением чистой читабельности и меньшей вероятности ошибки.

Это похоже на клише, но скажите, что следующее может помочь вам понять:

var myInt = 23;

возвращает тип int , тогда как

var myInt = "23";

возвращает строка типа.

Ссылка MSDN

2
ответ дан 23 November 2019 в 04:46
поделиться

Мне это тоже не понравилось.

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

Главное, что нужно помнить, это то, что ReSharper настроен на любые стандарты кодирования, которые вы хотите.

Изменить: ReSharper и var

18
ответ дан 23 November 2019 в 04:46
поделиться

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

var obj = new SomeObject();

Если тип не очевиден, вам лучше записать его:

SomeObject obj = DB.SomeClass.GetObject(42);
281
ответ дан 23 November 2019 в 04:46
поделиться

Я лично предпочитаю отключить это предложение. Использование var часто может улучшить читаемость; но, как вы упомянули, он иногда сокращает его (с простыми типами или когда результирующий тип неясный ).

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

96
ответ дан 23 November 2019 в 04:46
поделиться

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

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

6
ответ дан 23 November 2019 в 04:46
поделиться

Технической разницы нет (как указал eWolf). Вы можете использовать один или другой, сгенерированный код CLR будет выглядеть одинаково.

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

0
ответ дан 23 November 2019 в 04:46
поделиться

ReSharper рекомендует использовать var, потому что он имеет тенденцию чтобы не загромождать создание объекта.

Сравните эти два примера:

StringBuilder bld = new StringBuilder();

var bld = new StringBuilder();

Это просто сокращение, которое, как предполагается, будет легче читать.

Я думаю, что это нормально, когда вы создаете новые объекты явно с помощью "new". Однако в вашем примере это может быть неочевидно, если классы не были названы должным образом.

6
ответ дан 23 November 2019 в 04:46
поделиться