我是相當新的C鋒利,一直在尋找一個答案如下:IEnumerator的VS的IEnumerator <T>
你爲什麼要實施IEnumerator<T>
當你有IEnumerator
? IEnumerator
返回集合中的項目作爲類型對象,因此迎合所有類型。
由於
我是相當新的C鋒利,一直在尋找一個答案如下:IEnumerator的VS的IEnumerator <T>
你爲什麼要實施IEnumerator<T>
當你有IEnumerator
? IEnumerator
返回集合中的項目作爲類型對象,因此迎合所有類型。
由於
[非泛型化]
IEnumerator
返回從集合背項目作爲對象類型,所以迎合所有類型。
這就是問題所在。您現在知道沒有任何關於序列中的對象。他們可能是什麼,所以你必須能夠處理什麼出來的序列。如果你有一系列的長頸鹿,或一系列的客戶,或一系列整數,那麼你就知道序列中的每一個元素都是長頸鹿,客戶,整數等等。如果你有一系列對象,那麼你必須編寫代碼來檢查每個對象是什麼類型的東西。
具有類型信息使編譯器能夠通過系統對該信息進行線程化。假設我們有一個IEnumerable<Customer>
。因此,序列中的所有內容都是客戶。然後如果我們說:
var first = customers.First();
var address = first.Address;
現在,編譯器可以推斷first
是Customer
,知道客戶有地址,所以第二行是合法的。如果customers
只是IEnumerable
那麼編譯器不能證明你的程序是類型安全的!
此外,某些類型在處理爲object
時表現出稱爲「拳擊處罰」的表現懲罰。擁有一個普通類型的集合消除了這種懲罰。
輝煌的伴侶。非常感謝你的迴應。 – nish91
歡迎來到SO。 **請不要在一個問題中提出兩個問題**。如果你有兩個問題,然後發佈兩個問題。 –
是的,我會從這個問題中刪除第二個問題。歡呼聲 – nish91
通過'IEnumerator'您可以獲得類型安全。即。您不必在使用它之前檢查對象的類型,因爲您知道它是T類型的。 –