私は独自の ArrayList クラスを実装していましたが、それに気づいたときは驚きました。
public System.Collections.Generic.IEnumerator<T> GetEnumerator() {
return _array.GetEnumerator();
}
うまくいきませんでした。配列が .NET で IEnumerator を実装しない理由は何ですか?
回避策はありますか?
ありがとう
私は独自の ArrayList クラスを実装していましたが、それに気づいたときは驚きました。
public System.Collections.Generic.IEnumerator<T> GetEnumerator() {
return _array.GetEnumerator();
}
うまくいきませんでした。配列が .NET で IEnumerator を実装しない理由は何ですか?
回避策はありますか?
ありがとう
配列は を実装しますIEnumerable<T>
が、これは CLI が配列に対して持つ特別な知識の一部として行われます。これはあたかも明示的な実装であるかのように機能します (ただし、そうではありません: 実行時に行われます)。多くのツールでは、この実装は表示されません。これについては、クラス概要の備考セクションで説明されています。Array
キャストを追加できます:
return ((IEnumerable<T>)_array).GetEnumerator();
古い MSDN (docs.microsoft.com より前) のカバレッジは、異なる .NET バージョンで数回変更されていることに注意してください。備考セクションを確認してください。
IEnumerable<T> OfType<T>()
IEnumerable インターフェイスを拡張する System.Linq 名前空間のジェネリック メソッドを使用できます。タイプが T とは異なるすべての要素を除外し、 を返しIEnumerable<T> collection
ます。変換演算子を使用すると、 (および他の非ジェネリック型) が type のアイテムを格納する(IEnumerable<T>)_array
ため、安全ではない可能性があります。System.Array
System.Object