我正在做一个Pluralsight课程,作者正在解释为了返回一个合适的集合(而不是作为实体框架查询结果的Lazily加载的集合),它需要做ToArray操作。到目前为止一直很好,但后来他解释说,在IQueryable
你不能ToArray()
,所以他需要实际做query.ToList().ToArray();
你真的需要两种方法吗?我修改了代码,似乎与ToList()
一样,与ToArray()
一样(预计该方法会返回IEnumerable<T>
)。
答案 0 :(得分:5)
这似乎......关闭。 MSDN's Documentation on IQueryable同时将ToList()
和ToArray()
作为有效的扩展方法。
同时使用ToList()
和ToArray()
似乎过于冗余,并且在大型集合中可能不具备性能(请不要在此引用我,纯粹猜测!:)
T[]
和List<T>
都会实现IEnumerable<T>
,只要该方法返回IEnumerable<T>
,那么它就不重要了。
public IEnumerable<int> GetNumbers()
{
return Enumerable.Range(0,10)
.ToList();
}
public IEnumerable<int> GetNumbers()
{
return Enumerable.Range(0,10)
.ToArray();
}
public IEnumerable<int> GetNumbers()
{
return Enumerable.Range(0,10);
}
所有这些上述方法都将正确编译和构建。假设不在同一个班级,但这是一个不同的问题。
现在,以下方法赢得了
public List<int> GetNumbers()
{
// Compile error as int[] and List<int> are different types
return Enumerable.Range(0,10)
.ToArray();
}
public int[] GetNumbers()
{
// Compile error as int[] and List<int> are different types
return Enumerable.Range(0,10)
.ToList();
}