Предположим, у вас есть класс 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