C# 如何创建单例IEnumerable?

C# 如何创建单例IEnumerable?,c#,generics,ienumerable,C#,Generics,Ienumerable,C#是否提供了一些很好的方法将T类型的单个实体强制转换为IEnumerable 我能想到的唯一办法是: T entity = new T(); IEnumerable<T> = new List { entity }.AsEnumerable(); T实体=新的T(); IEnumerable=新列表{entity}.AsEnumerable(); 我想应该有更好的办法。我用 Enumerable.Repeat(entity, 1); (尽管在大多数情况下,我可能只会执行var

C#是否提供了一些很好的方法将
T
类型的单个实体强制转换为
IEnumerable

我能想到的唯一办法是:

T entity = new T();
IEnumerable<T> = new List { entity }.AsEnumerable();
T实体=新的T();
IEnumerable=新列表{entity}.AsEnumerable();
我想应该有更好的办法。

我用

Enumerable.Repeat(entity, 1);

(尽管在大多数情况下,我可能只会执行
var singleton=new[]{entity};
,尤其是当它仅用于私人用途时。)

AsEnumerable()
的调用是不必要的
AsEnumerable
通常用于目标对象实现
IQueryable
但希望强制其使用LINQ to对象的情况(例如,在LINQ兼容的ORM上执行客户端筛选时)。由于
List
实现了
IEnumerable
,而不是
IQueryable
,因此不需要它

无论如何,你也可以用你的物品创建一个单元素数组

IEnumerable<T> enumerable = new[] { t };

可能重复:奇怪的是,VB.NET的可能重复没有C#那么详细!创建数组只是
{entity}
@Martinho:在C#中,你可以做
T[]x={y}
var x=new[]{y}
,但不是
var x={y}
。注意:数组构造函数的语法效率要高得多(但这种微观优化通常并不相关);另一方面,repeat方法保证是不可变的。我喜欢这个可枚举的方法。repeat允许您隐藏备份类型。另外,我>假设<它可能是通过循环/产量实现的,因此可以作为延迟执行实现的基础。@Sprague:如果通过“隐藏备份类型”,您指的是调用
Repeat
而不显式指定泛型参数的能力,那么隐式数组语法(
new[]{t}
)阿达姆罗宾森:不,也许是我用词混乱。我指的是IEnumerable(数组v.列表v.值生成函数)的实现
IEnumerable<T> enumerable = new[] { t };
IEnumerable<T> enumerable = Enumerable.Repeat(t, 1);