【问题标题】:Exists some other advantages using Select instead foreach C# [closed]使用 Select 而不是 foreach C# 存在一些其他优势 [关闭]
【发布时间】:2017-03-03 17:40:34
【问题描述】:

假设这两个代码:

1) 使用 foreach 和 Add in new list

var myList = new List<MyType>();
foreach(var myType in otherEntity.ListOfMyType) {
    myList.Add(new MyType {
        //... copy properties here
    });
}

2) 使用选择

var myList = otherEntity.ListOfMyType.Select(myType => new MyType {
    //... copy properties here
});

除了可读性之外,使用 select 代替 foreach 还有其他优势吗?

【问题讨论】:

  • 在您的情况下,两段代码之间几乎没有区别。可能会有一些非常小的性能差异(小到我怀疑你会注意到)。所以,是的,我认为这取决于可读性。
  • this...和this...和this的可能重复
  • Select 是惰性的并返回更通用的类型(IEnumerable&lt;T&gt; 而不是List&lt;T&gt;),这可能是一个优势。
  • @Lee:我不得不承认,考虑到变量的名称,我只是假设最后会有一个 ToList() 调用被遗漏了。我可能应该检查一下。 :)

标签: c# linq


【解决方案1】:

这两段代码的主要区别在于延迟执行:

  • 在第一种情况下,您有一个 List&lt;MyType&gt;,它在内存中完全“物化”了
  • 在第二种情况下,您有一个 IEnumerable&lt;MyType&gt;,它不会占用任何内存

如果您决定将myList 枚举到中间,则第二个解决方案将根据需要构造尽可能多的条目,而第一个构造会提前创建每个MyType 对象。

另一方面,拥有一个列表会使多个枚举在 CPU 周期方面可能更昂贵。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-15
    • 2016-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-22
    • 1970-01-01
    相关资源
    最近更新 更多