Как создать одиночный 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 }; в большинстве ситуаций, особенно если это было только для частного использования.)