2012-04-17 78 views
2

在C#,我被告知,如果一個容器類如List(T)是第一向上轉型到容器的接口,如IEnumerable的,並且隨後在使用的foreach然後運行時垃圾將被創建重複。此外,即使完全downcast,我被告知迭代Collection(T)也會在堆上創建引用。我知道這是由GetEnumerator()的虛擬調用引起的,它可能會返回一個引用或值類型的結果。 MSDN文檔爲值類型的C#枚舉術語混淆

檢驗清楚地列出所有枚舉作爲值類型。如果一個枚舉包含一個枚舉器列表,那麼不是按照這些文檔的值類型的這些枚舉器?他們裝盒?或者完全不相關,但名稱相似?還是其他什麼東西?

我不知道如何統一這兩個說法,我希望有人能更直白地解釋給我聽。

謝謝。

編輯:問改寫考慮到上使用的話帳戶的評註建議,如「從未」和「非必要」

回答

2

Enumarations(enum S)無關的枚舉。

而且

我被告知,以避免...

似乎是一個非常不成熟的,不必要的優化。

+0

如果的foreach正在執行恆定運行時間分配和我的堆是複雜的,我不能讓發生的集合。根據與XNA/Xbox 360的.NET Compact Framework的一個一站式的世界垃圾回收時每兆字節分配時間。 – 2012-04-17 10:18:12

+0

你沒有提到或標籤XNA ...默認的假設是FX普通。 – 2012-04-17 10:27:15

+0

確實,但我的問題不是關於優化。只是告訴你爲什麼我很擔心這件事。這種行爲不是特定於XNA,我看到沒有必要標記它。 – 2012-04-17 10:33:16