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

Использование var вне метода

Я хотел использовать ключевое слово var для объявления поля в моем классе, однако var работает только внутри методов.

Код, который у меня выглядит:

public static Dictionary<string, string> CommandList = new Dictionary<string, string>{};

и я хотел:

public static var CommandList = new Dictionary<string, string>

Почему это невозможно?

4b9b3361

Ответ 1

Моя статья по теме:

Почему нет var в полях?

Подводя итог:

  • Если у нас есть поля "var", то тип поля не может быть определен до тех пор, пока выражение не будет проанализировано, и это произойдет после того, как нам уже нужно знать тип поля.

  • Что делать, если в этих ссылках есть длинные цепочки или даже циклы? Все эти алгоритмы должны быть переписаны и протестированы в мире, где информация типа верхнего уровня определяется из, а не потребляется .

  • Если у вас есть поля "var", инициализатор может быть анонимного типа. Предположим, что поле открыто. В CLR или CLS еще нет стандарта о том, какой правильный способ открыть поле анонимного типа.

Ответ 2

Из ссылка С#

  • Начиная с Visual С# 3.0, переменные которые объявлены в области методов может иметь неявный тип var.

Также из Справочник по программированию на С#

  • var может использоваться только тогда, когда локальная переменная объявляется и инициализируется в том же самом выражении; переменная не может быть инициализирована нулем, или группе методов или анонимной функции.
  • var не может использоваться в полях в классе.

Он просто не предназначен для использования, которое вы имеете в виду.

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

Ответ 3

Короткий ответ заключается в том, что спецификация говорит, что это не законно.; -)

Как правило, это не то, что вы хотите сделать в любом случае. Тип элемента должен быть IDictionary<string, string> не Dictionary<string, string>. Это небольшая нить, но в целом лучше использовать интерфейс во внешнем видимом объекте, чтобы впоследствии вы могли изменить тип, не затрагивая клиентов кода. Компилятор просто дает вам немного толчка, чтобы вести вас в этом направлении.