C# 如何创建单例IEnumerable?
C#是否提供了一些很好的方法将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
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);