Reputation: 22854
Does C# offer some nice method to cast a single entity of type T
to IEnumerable<T>
?
The only way I can think of is something like:
T entity = new T();
IEnumerable<T> = new List { entity }.AsEnumerable();
And I guess there should be a better way.
Upvotes: 18
Views: 6429
Reputation: 1393
With the new collection expression that introduced in C# 12:
var singleton = [entity];
Just like the plain Dim singleton = { entity }
in VB.NET: How can I create a singleton IEnumerable?
Upvotes: 0
Reputation: 185693
Your call to AsEnumerable()
is unnecessary. AsEnumerable
is usually used in cases where the target object implements IQueryable<T>
but you want to force it to use LINQ-to-Objects (when doing client-side filtering on a LINQ-compatible ORM, for example). Since List<T>
implements IEnumerable<T>
but not IQueryable<T>
, there's no need for it.
Anyway, you could also create a single-element array with your item;
IEnumerable<T> enumerable = new[] { t };
Or Enumerable.Repeat
IEnumerable<T> enumerable = Enumerable.Repeat(t, 1);
Upvotes: 25
Reputation: 269578
var entity = new T();
var singleton = Enumerable.Repeat(entity, 1);
(Although I'd probably just do var singleton = new[] { entity };
in most situations, especially if it was only for private use.)
Upvotes: 6