.NETの配列は、IENUMERABLEのみを実装し、IENUMERABLE のみを実装するのですか?
-
03-10-2019 - |
質問
私は自分のArrayListクラスを実装していましたが、それに気付いたときに驚いたままでした
public System.Collections.Generic.IEnumerator<T> GetEnumerator() {
return _array.GetEnumerator();
}
うまくいきませんでした。 .NETにiNumeratorを実装しない理由は何ですか?
作業用はありますか?
ありがとう
解決
配列は実装します IEnumerable<T>
, 、しかし、それはCLIがアレイに対して持っている特別な知識の一部として行われます。これは、明示的な実装であるかのように機能します(ただし、そうではありません:実行時に行われます)。多くのツールはこの実装を表示しません、これはで説明されています 備考 のセクション Array
クラスの概要。
キャストを追加できます:
return ((IEnumerable<T>)_array).GetEnumerator();
注、これの古いMSDN(pre docs.microsoft.com)のカバレッジは、異なる.netバージョンで数回変更されました。 備考 セクション。
他のヒント
一般的な方法を使用できます IEnumerable<T> OfType<T>()
Ienumerableインターフェイスを拡張するSystem.linqネームスペースから。それはTとは異なるすべての要素を除外し、戻ります IEnumerable<T> collection
. 。使用する場合 (IEnumerable<T>)_array
変換オペレーター、それは安全ではないかもしれません。 System.Array
(およびその他の非否定タイプ)タイプのアイテムを保存します System.Object
.
所属していません StackOverflow