web-dev-qa-db-ja.com

.netの配列がIEnumerable <T>ではなくIEnumerableのみを実装するのはなぜですか?

私は自分のArrayListクラスを実装していて、それに気付いたとき驚いた

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

うまくいきませんでした。配列が.NETでIEnumeratorを実装しない理由は何ですか?

回避策はありますか?

ありがとう

43

配列はIEnumerable<T>を実装していますが、これはCLIが配列に対して持っている特別な知識の一部として行われます。これは、明示的な実装であるかのように機能します(ただし、そうではありません:実行時に行われます)。多くのツールはこの実装を表示しません。これはArrayクラスの概要の 備考 セクションで説明されています。

キャストを追加できます:

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

これに関する古いMSDN(docs.Microsoft.com以前)のカバレッジは、.NETバージョンが異なると数回変更されます。 remarks セクションを確認してください。

62
Richard