【问题标题】:Does using the extension method ToList<T>() waste resources?使用扩展方法 ToList<T>() 会浪费资源吗?
【发布时间】:2012-08-09 19:18:02
【问题描述】:

我有一个关于 LINQ、IEnumerable&lt;&gt;List&lt;&gt; 的问题。

当我有一个List&lt;T&gt; 并想要过滤或搜索它时,我会像这样使用 LINQ:

var psec = from p in MyListOfSomeObjects
           where ((p.Tipo == tipo) || (p.Tipo == null))
           select p;

但在一种特殊情况下,我需要一个实际的 List&lt;T&gt;,而不是 LINQ 查询返回的 IEnumerable&lt;T&gt;

我可以使用psec.ToList&lt;T&gt;() 来获取我的List&lt;T&gt;,但我的问题是:

ToList&lt;T&gt;() 方法是否浪费时间或计算机资源?它是否在IEnumerable&lt;T&gt; 上进行一些迭代或循环以构建List&lt;T&gt;

【问题讨论】:

    标签: c# linq generics


    【解决方案1】:

    Tolist() 方法是否浪费时间或计算机资源?

    这取决于。如果您需要一个列表,那么它可能不是浪费。它确实需要时间和资源来构建列表。

    在 IEnumerable psec 上进行一些迭代或循环以构建列表?

    是的。它遍历可枚举并从其中的项目构建列表。

    一般来说,如果您的目标只是枚举结果(即:在foreach 循环中使用),则无需通过ToList() 转换为List&lt;T&gt;,这样做只是浪费。

    【讨论】:

    • 如果将其用作单个 LINQ 语句,您是否知道 ToList 是否优化到任何程度?
    • @James 否 - 是否在一个“声明”中完成并不重要。编译器以同样的方式对待它,它只是一个方法调用。 ToList() 只是(有效地)返回new List&lt;T&gt;(sourceEnumerable)
    • @James 真的和你一样:List&lt;YourType&gt; newList = new List&lt;YourType&gt;(psec);
    猜你喜欢
    • 2016-06-27
    • 1970-01-01
    • 1970-01-01
    • 2021-10-25
    • 2014-06-07
    • 2013-03-23
    • 1970-01-01
    • 2019-02-22
    • 2012-08-09
    相关资源
    最近更新 更多