50

私は独自の ArrayList クラスを実装していましたが、それに気づいたときは驚きました。

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

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

回避策はありますか?

ありがとう

4

2 に答える 2

68

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

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

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

古い MSDN (docs.microsoft.com より前) のカバレッジは、異なる .NET バージョンで数回変更されていることに注意してください。備考セクションを確認してください。

于 2010-05-05T13:51:23.857 に答える
-1

IEnumerable<T> OfType<T>()IEnumerable インターフェイスを拡張する System.Linq 名前空間のジェネリック メソッドを使用できます。タイプが T とは異なるすべての要素を除外し、 を返しIEnumerable<T> collectionます。変換演算子を使用すると、 (および他の非ジェネリック型) が type のアイテムを格納する(IEnumerable<T>)_arrayため、安全ではない可能性があります。System.ArraySystem.Object

于 2016-05-07T08:05:57.943 に答える