リフレクションを使用して、アイテムの反復可能なリスト(型不明、オブジェクト)にキャストする必要があるオブジェクトがあります。ウォッチウィンドウを使用すると、オブジェクトがいくつかの型の配列であることがわかります。要素の数が分かり、ツリービューを展開して要素自体を見ることができます。C#オブジェクトへの配列
まず、渡されたオブジェクトが何らかの配列(List、オブジェクト[]など)であることを確認する必要があります。それから、その配列を繰り返し処理する必要があります。しかし、私は型変換を行うことはできません。ここで
は(省略)私はそれを使用している方法は次のとおりです。
private static void Example(object instance, PropertyInfo propInfo)
{
object anArray = propInfo.GetValue(instance, null);
ArrayList myList = anArray as ArrayList;
foreach (object element in myList)
{
// etc
}
}
私は、様々な異なるキャストを試してみました。上記は例外を発生させませんが、anArrayが実際に存在し、項目を含んでいる場合、mylistはnullです。実際に保存されるインスタンスは、厳密に型指定されたリスト<>ですが、必要に応じてフォームの一部しか使用できません。しかし、演習のポイントは、このExample()メソッドはプロパティの基本型を知らないということです。
をお試しください'if(instance.GetType()がIEnumerable)' – Tsar
@Bad Display Nameは、* is *キーワードがどのように動作するか、System.TypeからSystem.Collection.IEnumerableにキャストしようとしています。 System.Typeはそのインタフェースを実装していないため、動作しません。 ** typeof(IEnumerable).IsAssignableFrom(instance.GetType())** – MattDavey