.NETの配列は、IENUMERABLEのみを実装し、IENUMERABLE のみを実装するのですか?

StackOverflow https://stackoverflow.com/questions/2773740

質問

私は自分の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.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top