Var vs явное объявление

Возможный дубликат:
Использование ключевого слова var в С#

Привет, Просто переместил работу, и я часто использовал var. На моей предыдущей работе мы делали много TDD и использовали resharper.

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

Некоторое время назад я думал так же, но теперь я привык к этому, и это делает мой код более аккуратным.

Я прочитал несколько сообщений, и кажется, что это путаница, насколько она эффективна или нет. Я читал, что с помощью var создается тот же IL-код. Так не должно быть так эффективно? Где-то еще я читал, что, хотя использование var создает тот же IL-код, он должен выяснить, какой тип он есть. Так что же означает "предполагаемый"?

Некоторые разъяснения относительно того, насколько они бывают одинаковыми, были бы фантастическими.

Ответ 1

Что касается эффективности времени выполнения, это не имеет значения. Это действительно скомпилировано в точно такое же ИЛ. Эта переменная все еще будет статически типизирована, это просто, что тип выводится из выражения инициализации.

"Inferred" означает "разработанный из другой информации". Поэтому, если декларация:

string x = "hello";

переменная x явно объявляется типом string. Компилятор не должен ничего разбираться. Если вы используете var:

var x = "hello";

тогда компилятор находит тип времени компиляции присваиваемого выражения и делает это типом переменной. x по-прежнему известен как строковая переменная везде в коде.

Если разработчики, с которыми вы работаете, полагаете, что var ведет себя динамически, я бы очень осторожно относился к другой информации, которую они вам рассказывают. Вы можете с осторожностью предложить, чтобы они узнали немного больше о том, как работают новые языковые функции, прежде чем судить их.

С точки зрения эффективности разработчиков, этот вопрос гораздо сложнее судить. Лично я использую var совсем немного - особенно в тестах, но не везде.

Ответ 2

var преобразуется в точный тип во время compilation.no проблема эффективности по моим знаниям.

IL для этого кода показан ниже:

class Foo
    {
        void Bar()
        {
            var iCount = 0;
            int iCoount1 = 0;
        }
    }

alt text