リフレクションを通じてコレクションにアクセスする 質問する

リフレクションを通じてコレクションにアクセスする 質問する

リフレクションを使用してコレクションを反復処理する方法 (できれば foreach を使用) はありますか? リフレクションを使用してオブジェクト内のプロパティを反復処理しています。プログラムがコレクションである型に到達したときに、コレクションの内容を反復処理して、コレクション内のオブジェクトにアクセスできるようにしたいと考えています。

現時点では、すべてのプロパティに属性が設定されており、コレクションであるプロパティの IsCollection フラグが true に設定されています。私のコードはこのフラグをチェックし、true の場合はリフレクションを使用して Type を取得します。コレクションで GetEnumerator または Items を呼び出して、アイテムを反復処理できるようにする方法はありますか?

ベストアンサー1

私もこの問題を抱えていましたが、リフレクションを使用する代わりに、IEnumerable であるかどうかを確認するだけで済みました。すべてのコレクションはそれを実装しています。

if (item is IEnumerable)
{
    foreach (object o in (item as IEnumerable))
    {

    }
} else {
   // reflect over item
}

おすすめ記事