【发布时间】:2011-02-10 16:51:06
【问题描述】:
C# 是否提供了一些不错的方法将T 类型的单个实体转换为IEnumerable<T>?
我能想到的唯一方法是:
T entity = new T();
IEnumerable<T> = new List { entity }.AsEnumerable();
而且我想应该有更好的方法。
【问题讨论】:
标签: c# generics ienumerable
C# 是否提供了一些不错的方法将T 类型的单个实体转换为IEnumerable<T>?
我能想到的唯一方法是:
T entity = new T();
IEnumerable<T> = new List { entity }.AsEnumerable();
而且我想应该有更好的方法。
【问题讨论】:
标签: c# generics ienumerable
您无需致电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);
【讨论】:
Repeat 的能力,那么隐式数组语法 (new[] { t }) 可以同样的事情。
我用
Enumerable.Repeat(entity, 1);
【讨论】:
var entity = new T();
var singleton = Enumerable.Repeat(entity, 1);
(虽然在大多数情况下我可能只会使用var singleton = new[] { entity };,尤其是如果它仅用于私人用途。)
【讨论】:
{ entity }。
T[] x = { y } 或 var x = new[] { y },但不能使用 var x = { y }。