使用Select代替foreach C#存在一些其他优点

时间:2017-03-03 17:40:35

标签: c# linq

假设这两个代码:

1)使用foreach添加新列表

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

2)使用select

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

使用select还存在其他优势,而不是可读性吗?

1 个答案:

答案 0 :(得分:2)

这两段代码之间的主要区别是延迟执行:

  • 在第一种情况下,你有List<MyType>在内存中完全“物化”
  • 在第二种情况下,你有IEnumerable<MyType>,没有记忆

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

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