2017-01-13 33 views
7

當我有一個IEnumerable<SomeClass>從中我不知道它是否列表(根據List<T>),我必須枚舉IEnumerable以確保我沒有枚舉該枚舉兩次(如循環它兩次,或類似的東西)。正在轉換爲IList,然後調用ToList()時比空ToList()更好嗎?

ReSharper的警告我,IEnumerable的可能的多個枚舉 - 這是很好的,有時候你忘記它 - 讓你選擇快速修復:

  • 枚舉數組
  • 枚舉列出

當我選擇Enumerate列表時,resharper引入了一個局部變量,並按如下方式分配IEnumerable(示例):

var enumeratedItems = items as IList<SomeClass> ?? items.ToList(); 

現在我的問題是:

爲什麼不簡單地做items.ToList();

首先嚐試投射到IList<SomeClass>的優點是什麼?

回答

7

也許IEnumerable已經是一個列表,在這種情況下調用ToList()將剛從是已經存在的創建一個新的列表,這樣做的ReSharper之前,建議嘗試投它首先要檢查它是否是一個IList或不和只有在沒有的情況下,我們纔會執行有一定成本的ToList()操作。

+0

哦,我明白了,很有道理!謝謝 :) – Mafii