Инициализаторы коллекции с автоматическими свойствами - PullRequest
3 голосов
/ 22 апреля 2011

Есть ли способ использовать инициализатор коллекции, когда также используются автоматические свойства?

// Uses collection initializer but not automatic properties
private List<int> _numbers = new List<int>();
public List<int> Numbers
{
    get { return _numbers; }
    set { _numbers = value; }
}


// Uses automatic properties but not collection initializer
public List<int> Numbers { get; set; }


// Is there some way to do something like this??
public List<int> Numbers { get; set; } = new List<int>();

Ответы [ 2 ]

4 голосов
/ 22 апреля 2011

Нет, в основном.Вам придется инициализировать коллекцию в конструкторе.Если честно, настраиваемая коллекция редко бывает хорошей идеей в любом случае ;Я бы на самом деле использовал просто (изменение вашей первой версии, удаление set):

private readonly List<int> _numbers = new List<int>();
public List<int> Numbers { get { return _numbers; } }

или если я хочу отложить конструкцию до первого доступа:

private List<int> _numbers;
public List<int> Numbers {
    get { return _numbers ?? (_numbers = new List<int>()); }
}
1 голос
/ 22 апреля 2011

// Is there some way to do something like this??

public List<int> Numbers { get; set; } = new List<int>();

Нет. Вы должны инициализировать в явно определенном конструкторе, здесь нет никаких приемов инициализации поля.

Кроме того, это не имеет ничего общего с инициализаторами коллекции. Вы также не можете инициализировать

public object Foo { get; set; }

вне конструктора.

...