Присвоение значения свойству, которое никогда не возвращает NULL - PullRequest
0 голосов
/ 20 февраля 2019

У меня есть свойство

public static List<int> intItems
{
    get { return _intItems ?? new List<int>(); }
    set { _intItems = value; }
}
private static List<int> _intItems;

, которое надежно, никогда не имеет значения null.Но когда я Add значение для него, оно не работает.

intItems.Add(1);
Console.WriteLine(intItems.First()); //indexoutofrangeexception

Чтобы сделать эту работу, я должен сначала присвоить значение приватному полю, чтобы включить ссылочный доступ:

public static List<int> intItems
{
    get
    {
        if (_intItems == null)
        {
            _intItems = new List<int>();
        }
        return _intItems;
    }
    set { _intItems = value; }
}

Мой вопрос: есть ли более элегантный способ, чем свойство с 12 строками кода?У меня есть несколько таких.

Ответы [ 2 ]

0 голосов
/ 20 февраля 2019

В качестве альтернативы ответу кантона7 вы можете проверить null на set:

private static List<int> _intItems = new List<int>();

public static List<int> intItems {
  get { return _intItems; }
  set { _intItems = value ?? new List<int>(); }
}
0 голосов
/ 20 февраля 2019

Обычный шаблон для лениво-загруженного свойства:

private static List<int> _intItems;
public static List<int> IntItems
{
    get => _intItems ?? (_intItems = new List<int>());
    set => _intItems = value;
}

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

private static List<int> _intItems = new List<int>();
public static List<int> IntItems
{
    get => _intItems;
    set => _intItems = value ?? throw new ArgumentNullException();
}

Однако, если ваше требование состоит в том, чтобы ваше свойство никогда не возвращало ноль, то почему бы не сделать это:

public static List<int> IntItems { get; } = new List<int>();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...