Использование var вне метода
Я хотел использовать ключевое слово var
для объявления поля в моем классе, однако var
работает только внутри методов.
Код, который у меня выглядит:
public static Dictionary<string, string> CommandList = new Dictionary<string, string>{};
и я хотел:
public static var CommandList = new Dictionary<string, string>
Почему это невозможно?
Ответы
Ответ 1
Моя статья по теме:
Почему нет var в полях?
Подводя итог:
-
Если у нас есть поля "var", то тип поля не может быть определен до тех пор, пока выражение не будет проанализировано, и это произойдет после того, как нам уже нужно знать тип поля.
-
Что делать, если в этих ссылках есть длинные цепочки или даже циклы? Все эти алгоритмы должны быть переписаны и протестированы в мире, где информация типа верхнего уровня определяется из, а не потребляется .
-
Если у вас есть поля "var", инициализатор может быть анонимного типа. Предположим, что поле открыто. В CLR или CLS еще нет стандарта о том, какой правильный способ открыть поле анонимного типа.
Ответ 2
Из ссылка С#
- Начиная с Visual С# 3.0, переменные
которые объявлены в области методов
может иметь неявный тип var.
Также из Справочник по программированию на С#
- var может использоваться только тогда, когда локальная переменная объявляется и инициализируется в том же самом выражении; переменная не может быть инициализирована нулем, или группе методов или анонимной функции.
- var не может использоваться в полях в классе.
Он просто не предназначен для использования, которое вы имеете в виду.
Основная цель состоит в том, чтобы разрешить поддержку анонимных типов в вашем коде, с дополнительным преимуществом, позволяющим скрыть строгий способ указания локальных переменных.
Ответ 3
Короткий ответ заключается в том, что спецификация говорит, что это не законно.; -)
Как правило, это не то, что вы хотите сделать в любом случае. Тип элемента должен быть IDictionary<string, string>
не Dictionary<string, string>
. Это небольшая нить, но в целом лучше использовать интерфейс во внешнем видимом объекте, чтобы впоследствии вы могли изменить тип, не затрагивая клиентов кода. Компилятор просто дает вам немного толчка, чтобы вести вас в этом направлении.