2017-02-14 89 views
2

我是相當新的C鋒利,一直在尋找一個答案如下:IEnumerator的VS的IEnumerator <T>

你爲什麼要實施IEnumerator<T>當你有IEnumeratorIEnumerator返回集合中的項目作爲類型對象,因此迎合所有類型。

由於

+0

歡迎來到SO。 **請不要在一個問題中提出兩個問題**。如果你有兩個問題,然後發佈兩個問題。 –

+0

是的,我會從這個問題中刪除第二個問題。歡呼聲 – nish91

+1

通過'IEnumerator '您可以獲得類型安全。即。您不必在使用它之前檢查對象的類型,因爲您知道它是T類型的。 –

回答

11

[非泛型化] IEnumerator返回從集合背項目作爲對象類型,所以迎合所有類型。

這就是問題所在。您現在知道沒有任何關於序列中的對象。他們可能是什麼,所以你必須能夠處理什麼出來的序列。如果你有一系列的長頸鹿,或一系列的客戶,或一系列整數,那麼你就知道序列中的每一個元素都是長頸鹿,客戶,整數等等。如果你有一系列對象,那麼你必須編寫代碼來檢查每個對象是什麼類型的東西。

具有類型信息使編譯器能夠通過系統對該信息進行線程化。假設我們有一個IEnumerable<Customer>。因此,序列中的所有內容都是客戶。然後如果我們說:

var first = customers.First(); 
var address = first.Address; 

現在,編譯器可以推斷firstCustomer,知道客戶有地址,所以第二行是合法的。如果customers只是IEnumerable那麼編譯器不能證明你的程序是類型安全的!

此外,某些類型在處理爲object時表現出稱爲「拳擊處罰」的表現懲罰。擁有一個普通類型的集合消除了這種懲罰。

+0

輝煌的伴侶。非常感謝你的迴應。 – nish91