Автоматическая инициализация списка и автозавершение словаря в классе

У меня есть класс с этим свойством:

public Dictionary<string, string=""> LoggedProperties { get; set; }
</string,>

Я хочу автоматически инициализировать его. Без использования конструктора.

Причина в том, что я думаю, что нет pro, когда значение по умолчанию для него равно null

Я имею в виду, что если я получить доступ к члену класса (статическому или после создания экземпляра класса) Я не хочу, чтобы получить нулевое ссылочное исключение. Для меня это не имеет смысла. Я хочу, чтобы значение по умолчанию для объекта было равно null.

Есть ли какой-нибудь компактный способ сделать это?

3 ответа

Инициализация автоматических свойств не поддерживается текущей версией С#.

Это одна из наиболее востребованных функций VisualStudio С# UserVoice. Там есть шанс, что он будет реализован на С# 6, потому что разработчики решили добавить в эту версию множество крошечных синтаксических функций. Если вы хотите, чтобы функция была реализована, вы можете проголосовать за нее.


private Dictionary<int,string> m_LoggedProperties = new Dictionary<int, string="">();
 public Dictionary<int,string> LoggedProperties
 {
 get
 {
 return m_LoggedProperties;
 }
 set
 {
 m_LoggedProperties = value;
 }
 }
</int,string></int,></int,string>

Хотя что вы подразумеваете, without using the constructor? Невозможно инициализировать элемент неинициализированного объекта. Это просто синтаксический член словаря-словаря по-прежнему будет инициализирован при вызове конструктора.


Единственный способ - это изменить свойство AutoProperty на стандартное свойство:

private Dictionary _LoggedProperties = new Dictionary<string, string="">();
 public Dictionary<string, string=""> LoggedProperties 
 { 
 get { return _LoggedProperties; } 
 set { this._LoggedProperties = value; } 
 }
</string,></string,>

Если вы хотите инициализировать свою собственность при ее первом использовании, вы можете сделать следующее:

get {
 if (_LoggedProperties == null)
 {
 _LoggedProperties = new Dictionary<string, string="">();
 }
 return _LoggedProperties;
 } 
</string,>

licensed under cc by-sa 3.0 with attribution.