2015-04-06 20 views
0

我在做一个Pluralsight课程,作者解释说为了返回一个合适的集合(而不是一个Lazily加载的一个作为实体框架查询的结果),它需要做一个ToArray操作。到目前为止好,但他解释说,一个IQueryable你不能做ToArray(),所以他需要做的其实query.ToList().ToArray();需要IQueryable ToArray和ToList链接

这是真的,你真的需要这两种方法?我修改了代码,似乎与ToList()一样,与ToArray()一样(该方法预计会返回IEnumerable<T>)。

+1

如果呼叫者期待一个IEnumerable的''要返回然后做了'ToList()'就足够了,你不需要调用'ToArray的()'。 –

回答

5

这似乎...关闭。 MSDN's Documentation on IQueryable既有ToList()ToArray()为有效扩展methods.`

同时使用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(); 
} 
+0

对。我只是为了防止社区意识到为什么人们会这样做的一个晦涩理由:) –

+0

@ julio.g没有。似乎很傻。 – Cameron