Как я могу создать синглтон IEnumerable? - PullRequest
16 голосов
/ 10 февраля 2011

Предлагает ли C # хороший метод для приведения единственного объекта типа T к IEnumerable<T>?

Единственное, о чем я могу думать, это что-то вроде:

T entity = new T();
IEnumerable<T> = new List { entity }.AsEnumerable();

И я думаю, что должен быть лучший способ.

Ответы [ 3 ]

22 голосов
/ 10 февраля 2011

Ваш звонок на 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);
5 голосов
/ 10 февраля 2011

Я использую

Enumerable.Repeat(entity, 1);
4 голосов
/ 10 февраля 2011
var entity = new T();
var singleton = Enumerable.Repeat(entity, 1);

(хотя я, вероятно, просто сделал бы var singleton = new[] { entity }; в большинстве ситуаций, особенно если бы это было только для личного использования.)

...