我有一些使用反向擴展方法的代碼。.NET ToList是否保證始終返回一個新對象?
爲了確保它不會顛倒原始列表,原始程序員使用GetRange創建了一個新列表。
dim a = New List(of Thing)
... fill in a
dim b = a.GetRange(0, a.count)
b.reverse()
推測GetRange保證始終創建一個新的對象。這是否也適用於ToList?
然後,我可以寫:
dim a = New List(of Thing)
... fill in a
dim b = a.ToList()
b.reverse()
的優點則是一個類型可以是IEnumerable的(的T),它仍然能工作。
我自己測試過這一點,它一直是真實的,b是一個新的對象。問題是這樣的:
是否保證未來的實現會表現相同或者這種行爲是否是實現中的事故?
一個明顯的'優化'將返回對原始對象的引用,如果它已經是一個列表,這當然意味着第二個版本會顛倒原始列表。
相關:[?ToList() - 它創建一個新的列表]( http://stackoverflow.com/q/2774099/1149773) – Douglas