Почему я должен использовать var вместо типа?

Возможный дубликат:
ReSharper и var

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

UnhandledExceptionEventArgs ue = (UnhandledExceptionEventArgs) t;

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

var ue = (UnhandledExceptionEventArgs) t;

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

Ответ 2

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

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

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

Ответ 3

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

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

Ответ 4

Как говорили другие, нет разницы в скомпилированном коде (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));