Используя var за пределами метода

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

Код, который я имею, похож:

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

и я хотел иметь:

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

Каким образом это не возможно?

17
задан Jamie Dixon 18 December 2009 в 16:58
поделиться

3 ответа

Моя статья на эту тему:

Почему нет переменных для полей?

Подведем итог:

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

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

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

31
ответ дан 30 November 2019 в 11:44
поделиться

Из справочника C #

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

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

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

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

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

6
ответ дан 30 November 2019 в 11:44
поделиться

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

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

0
ответ дан 30 November 2019 в 11:44
поделиться