我正在做一个Pluralsight课程,其中作者正在解释为了返回一个正确的集合(而不是作为实体框架查询结果的Lazily加载的集合),它需要进行ToArray操作.到目前为止IQueryable一切都那么好,但后来他解释说,你不能这样做ToArray(),所以他需要真正做到query.ToList().ToArray();
你真的需要这两种方法吗?我已修改代码,似乎与ToList()使用相同ToArray()(该方法应返回IEnumerable<T>).
这似乎......关闭.MSDN关于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);
}
Run Code Online (Sandbox Code Playgroud)
所有这些上述方法都将正确编译和构建.假设不在同一个班级,但这是一个不同的问题.
现在,以下方法不会:
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();
}
Run Code Online (Sandbox Code Playgroud)