2

簡単な質問があります。

クラスSubA、SubB、SubCなど、いくつかのクラスがあります。抽象クラスもあります。親としましょう

したがって、SubA、SubB、および SubC のインスタンスを含む Parent オブジェクトの配列があります。

基本的に、配列または親をループして、SubA の特定のインスタンスを取得しようとしています。

次のことを試しましたが、型例外が発生します。

foreach (SubA a in Parent.GetList())

どんな助けでも大歓迎です。

4

3 に答える 3

6

はい、その現在のコードには暗黙的なキャストがあり、コレクションに「間違った」タイプのオブジェクトがあると失敗します。LINQ のOfType方法を使用することをお勧めします。

using System.Linq; // Make LINQ extension methods available

...

foreach (SubA a in Parent.GetList().OfType<SubA>())
{
    ...
}

a上記では決してnullにならないことに注意してください-それで問題ないと思います。

于 2013-09-30T16:12:24.320 に答える
5

ここにOfType<T>文書化された使用。

foreach(SubA a in Parent.GetList().OfType<SubA>())
于 2013-09-30T16:12:36.413 に答える