Как создать одиночный IEnumerable?
Предлагает ли С# какой-нибудь хороший метод для создания единственного объекта типа T
до IEnumerable<T>
?
Единственный способ, о котором я могу думать, это что-то вроде:
T entity = new T();
IEnumerable<T> = new List { entity }.AsEnumerable();
И я думаю, что должен быть лучший способ.
Ответы
Ответ 1
Ваш вызов AsEnumerable()
не нужен. AsEnumerable
обычно используется в случаях, когда целевой объект реализует IQueryable<T>
, но вы хотите заставить его использовать LINQ-to-Objects (например, при фильтрации на стороне клиента на LINQ-совместимой ORM). Поскольку List<T>
реализует IEnumerable<T>
, но не IQueryable<T>
, нет необходимости в нем.
В любом случае вы также можете создать одноэлементный массив с вашим элементом;
IEnumerable<T> enumerable = new[] { t };
Или Enumerable.Repeat
IEnumerable<T> enumerable = Enumerable.Repeat(t, 1);
Ответ 2
Я использую
Enumerable.Repeat(entity, 1);
Ответ 3
var entity = new T();
var singleton = Enumerable.Repeat(entity, 1);
(Хотя я бы, вероятно, просто делал var singleton = new[] { entity };
в большинстве ситуаций, особенно если это было только для частного использования.)