簡體   English   中英

為什么.net中的數組只實現IEnumerable而不是IEnumerable <T>?

[英]Why do arrays in .net only implement IEnumerable and not IEnumerable<T>?

我正在實現自己的ArrayList類,當我意識到這一點時,我感到很驚訝

public System.Collections.Generic.IEnumerator<T> GetEnumerator() {
    return _array.GetEnumerator();
}

沒用。 數組在.NET中不實現IEnumerator的原因是什么?

有沒有解決方法?

謝謝

數組確實實現了IEnumerable<T> ,但它是作為CLI對數組的特殊知識的一部分完成的。 這就好像它是一個顯式實現(但不是:它在運行時完成)。 許多工具都不會顯示此實現,這在Array類概述的備注部分中有所描述。

你可以添加一個演員:

return ((IEnumerable<T>)_array).GetEnumerator();

注意,較舊的MSDN(pre docs.microsoft.com)對此的覆蓋范圍在不同的.NET版本中有所改變,請檢查備注部分。

您可以使用System.Linq命名空間中的泛型方法IEnumerable<T> OfType<T>() ,它擴展了IEnumerable接口。 它將過濾掉所有類型不同於T的元素並返回IEnumerable<T> collection 如果使用(IEnumerable<T>)_array轉換運算符,則可能不安全,因為System.Array (和其他非泛型類型)存儲System.Object類型的項。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM