2011-02-01 4 views
114

Можно создать дубликат:
ReSharper and varПочему я должен использовать var вместо типа?

После установки ReSharper она требует (предупреждениями), которые я использую вар по возможности, например

UnhandledExceptionEventArgs ue = (UnhandledExceptionEventArgs) t; 

ReSharper хочет превратите его в

var ue = (UnhandledExceptionEventArgs) t; 

Мне нравится первая версия лучше, есть ли какие-либо причины, чтобы предпочесть var? лучшая производительность? что-нибудь? или это просто стиль кода?

+0

Другие дубликатами http://stackoverflow.com/questions/296783/resharper-vars http: // stackoverflow.com/questions/1010480/why-do-resharper-default-to-warning-if-you-dont-declare-using-var http://stackoverflow.com/questions/1873873/why-does-resharper-want-to -use-var-for-all http://stackoverflow.com/questions/1299045/is-resharper-correct –

+0

-1: Это было рассмотрено * так * много раз раньше, и дубликаты легко найти путем поиска на сайте , –

+4

@Greg Beech Я не согласен, не все знают его ошибку ReSharper, я думал, что это что-то значит, но я был неправ. – IAdapter

ответ

80

Это действительно просто стиль кодирования. Компилятор генерирует то же самое для обоих вариантов.

Смотрите также здесь вопрос производительности:

+1

Это правильно. Но я попытался использовать ключевое слово var в VS2010, но автоматическое завершение синтаксиса иногда кажется озадаченным. Поэтому, возможно, с ReShaper нет недостатка в использовании. – Peposh

+0

@Peposh yup .. то же самое, вот почему я прекратил использовать его ... пока не начал использовать ReSharper. – carny666

+3

Я прекратил использовать его, поскольку другое поколение разработчиков не перестает жаловаться на это. Моя защита была, если они прочитали и поняли код, в котором это не имело никакого значения. Я думаю, что на самом деле это упрощает; если вы используете код рефакторинга и типы изменений, вам не нужно обновлять свои ссылки на то, что вы реорганизовали, если оно меняет типы, т. е. меньше набирает = меньше работы. – user1040975

29

Когда вы говорите "предупреждениями", что именно вы имеете в виду? Я обычно видел, как он подсказывал, что вы можете использовать var, но ничего такого жесткого, как предупреждение.

Нет разницы в производительности с var - код скомпилирован в тот же IL. Потенциальная выгода заключается в удобочитаемости - если вы уже сделали тип кристалла переменной прозрачным в RHS назначения (например, с помощью вызова cast или конструктора), где преимущество также иметь его на LHS? Это личное предпочтение.

Если вы не хотите, чтобы R # предлагал использовать var, просто измените параметры. Одна вещь, о ReSharper: это очень настраивается :)

+0

есть зеленое предупреждение, я думаю, что подсказка - это когда я нажимаю, например, на строку, и я могу с ней справиться, но это предупреждение. После щелчка на нем его называют «Предложение». – IAdapter

+6

@ 01: Я бы не сказал, что зеленый свет - это «предупреждение». Оранжевый или красный, да ... но зеленый? –

+0

, если это вопрос стиля кодирования, чем почему мне это нужно? его предложение, но для таких новых пользователей, как я, это похоже на предупреждение, и если мне было все равно, я просто изменил бы его на var (ReSharper должен знать лучше меня). Я считаю, что технический термин - «шум». – IAdapter

10

В этом случае это просто стиль кодирования.

Использование var необходимо только при работе с анонимными типами.
В других ситуациях это вопрос вкуса.

+1

, но, как и многие фреймворки, подобные этому, ReSharper заставляет свой вкус;) – IAdapter

+4

Resharper не заставляет ничего. Это предложение. Вот почему он зеленый. –

+0

@Mystere Человек так же, как вы не заставляете никого не соглашаться с ReSharper, вы просто говорите, что ReSharper всегда прав. Я думаю, что большинство людей видят зеленое предупреждение. – IAdapter

10

Как уже говорил другие, нет никакой разницы в скомпилированном коде (IL), когда вы используете одну из следующих функций:

var x1 = new object(); 
object x2 = new object; 

Я полагаю, Resharper предупреждает вас, потому что это [на моем взгляде] проще чтобы прочитать первый пример, чем второй. Кроме того, что нужно повторять имя типа дважды?

Рассмотрим следующий пример, и вы получите то, что я имею в виду:

KeyValuePair<string, KeyValuePair<string, int>> y1 = new KeyValuePair<string, KeyValuePair<string, int>>("key", new KeyValuePair<string, int>("subkey", 5)); 

Это намного легче читать вместо этого:

var y2 = new KeyValuePair<string, KeyValuePair<string, int>>("key", new KeyValuePair<string, int>("subkey", 5)); 
+6

Причина, по которой я бы предпочёл НЕ использовать ** var **, если я допустил ошибку в отношении типа, который, как я ожидаю, будет возвращен в RHS, то использование явного типа с левой стороны поймает ошибку. Также не всегда очевидно, глядя на RHS, что такое тип без Intellisense. В приведенном выше примере, я был бы склонен добавить, используя заявление ' с помощью NestedKVP = KeyValuePair <строки, KeyValuePair > NestedKVP y1 = новый NestedKVP ("ключ", новый KeyValuePair ("подключи", 5)) ; ' – JonN

Смежные вопросы