2017-03-03 12 views
1

假設這兩個代碼:使用的foreach與添加在新的列表使用已存在使用選擇一些其他的優點,而不是的foreach C#

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 
}); 

存在的其他

1)使用select的優點代替foreach以外的可讀性?

+0

在你的情況下,兩段代碼之間幾乎沒有什麼區別。可能會有一些非常小的性能差異(稍微小一點,我懷疑你會注意到)。所以是的,我認爲這只是爲了可讀性。 – Chris

+1

[this]的可能重複(http://stackoverflow.com/questions/5322586/c-sharp-performance-of-linq-vs-foreach-iterator-block)...和[this](http:// stackoverflow.com/questions/22851234/linq-vs-foreach-vs-for-performance-test-results)...和[this](http://stackoverflow.com/questions/3156059/is-a-linq-語句快於foreach循環) –

+6

'Select'是懶惰的並返回一個更普通的類型('IEnumerable '而不是'List '),這可能是一個優點。 – Lee

回答

2

這兩段代碼之間的主要差別是延遲執行:

  • 在第一種情況下,你有一個List<MyType>,這是完全在內存
  • 「物化」在第二種情況下,你有一個IEnumerable<MyType>,這是不採取任何內存

如果你決定要列舉myList到中間,需要第二個解決方案將構建儘可能多的條目,而第一個構建創建每MyType對象提前。

另一方面,有一個列表使得多個枚舉在CPU週期方面可能更昂貴。

相關問題