Предположим, у вас есть класс Person :
public class Person
{
public string Name { get; set;}
public IEnumerable<Role> Roles {get; set;}
}
Я, очевидно, должен создать экземпляр Ролей в конструкторе. Теперь я делал это со списком следующим образом:
public Person()
{
Roles = new List<Role>();
}
Но я обнаружил этот статический метод в пространстве имен System.Linq
IEnumerable<T> Enumerable.Empty<T>();
Из MSDN:
Метод
Empty(TResult)()
кэширует пустую последовательность типаTResult
. Когда объект, который он возвращает, перечисляется, он не дает никаких элементов.В некоторых случаях этот метод полезен для передачи пустой последовательности определяемому пользователем методу, который принимает
IEnumerable(T)
. Его также можно использовать для создания нейтрального элемента для таких методов, какUnion
. См. раздел «Пример» для примера такого использования
Так что лучше написать конструктор так? Вы используете его? Почему? или если нет, то почему?
public Person()
{
Roles = Enumerable.Empty<Role>();
}
set
и просто использовать интерфейсIList
напрямую. Однако, если вы хотите сохранить его какIEnumerable
сset
, действительно кажется, что вам следует инициализировать его какnull
. Точно так же вам не нужно инициализироватьName
пустой строкой — поскольку у нее естьset
, вы просто инициализируетеnull
и получаете код клиентаset
. - person Dax Fohl   schedule 07.11.2016Array.Empty<Role>()
, который явно является массивом и, следовательно,IList<T>
. В Core это фактически один и тот же массив, отличающийся только типом. - person Jon Hanna   schedule 28.01.2017[]
, возможно, вам лучше использоватьICollection<T>
вместоIList<T>
. См. также stackoverflow.com/ вопросы/9855693/ - person Didii   schedule 31.07.2018