Подтвердить что ты не робот

С# 'var' ключевое слово по сравнению с явно определенными переменными

В настоящее время я использую 30-дневную пробную версию ReSharper, и до сих пор я был впечатлен предложениями, которые она делает. Однако одно предложение меня озадачивает.

Когда я явно определяю переменную, например:

List<String> lstString = new List<String>();

ReSharped добавляет немного коротко зеленой линии и говорит мне:

Используйте неявное объявление локальной переменной типа.

Если я последую его предложению, ReSharper изменяет строку кода на:

var lstString = new List<String>();

Итак, есть ли какой-то прирост производительности от изменения List<String> до a var, или это просто особенность ReSharper? Меня всегда учили, что явное определение переменной, а не использование динамического, более оптимально.

4b9b3361

Ответ 1

Итак, есть ли какая-то производительность, которую можно получить от изменения списка в var

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

Мне всегда учили, что явное определение переменной, а не использование динамического, более оптимально.

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

Он также удаляет полностью бесполезное дублирование кода. Для простых типов это может быть не так много. Но учтите:

SomeNamespace.AndSomeVeryLongTypeName foo = new SomeNamespace.AndSomeVeryLongTypeName();

Ясно, что в этом случае удвоение имени не просто ненужно, а действительно вредно.

Ответ 2

Неа. Они испускают точный IL.

Это просто вопрос стиля.

var имеет преимущество, которое облегчает вам изменение возвращаемого типа функций без изменения других частей исходного кода. Например, измените тип возврата с IEnumerable<T> на List<T>. Тем не менее, это может облегчить введение ошибок.

Ответ 3

Ключевое слово var фактически не объявляет переменную с динамическим типом. Переменная все еще статически типизирована, она просто выводит тип из контекста.

Его хороший ярлык, когда у вас длинное имя типа (общие имена типов могут быть длинными)

Ответ 4

Меньшая типизация = больше производительности:)