如何创建单例IEnumerable?

Yip*_*Yay 17 c# generics ienumerable

C#是否提供了一种很好的方法来将单个实体类型转换TIEnumerable<T>

我能想到的唯一方法是:

T entity = new T();
IEnumerable<T> = new List { entity }.AsEnumerable();
Run Code Online (Sandbox Code Playgroud)

我想应该有更好的方法.

Ada*_*son 23

你的电话AsEnumerable()是不必要的.AsEnumerable通常用于目标对象实现IQueryable<T>但你想强制它使用LINQ-to-Objects的情况(例如,在LINQ兼容的ORM上进行客户端过滤时).既然List<T>实现,IEnumerable<T>但没有IQueryable<T>,没有必要.

无论如何,您还可以使用您的项目创建单元素数组;

IEnumerable<T> enumerable = new[] { t };
Run Code Online (Sandbox Code Playgroud)

要么 Enumerable.Repeat

IEnumerable<T> enumerable = Enumerable.Repeat(t, 1);
Run Code Online (Sandbox Code Playgroud)


Mik*_*Two 6

我用

Enumerable.Repeat(entity, 1);
Run Code Online (Sandbox Code Playgroud)


Luk*_*keH 6

var entity = new T();
var singleton = Enumerable.Repeat(entity, 1);
Run Code Online (Sandbox Code Playgroud)

(尽管在大多数情况下我可能都会这么做var singleton = new[] { entity };,特别是如果它仅供私人使用的话。)

  • 奇怪的是,VB.NET 比 C# 简洁!创建数组只是“{实体}”。 (2认同)
  • @Martinho:在 C# 中,你可以执行 `T[] x = { y }` 或 `var x = new[] { y }`,但不能执行 `var x = { y }`。 (2认同)