1

私のコードでは、ParentClass 内で 1 つの ArrayList を宣言しています

public class ParentClass {
...
public ArrayList hybridElem; 
...

次に、ParentClass から実行される Reflection を使用して、この ArrayList @ ランタイムの FieldInfo を正常に取得できます。

その FieldInfo を使用して、hybridElem から要素を追加または読み取りできるようにしたいと考えています。.Item、.Count、.ToArray などの ArrayList のすべての関連する PropertyInfo を取得できます。また、これらのプロパティのゲッターとセッターも取得できます。

残念ながら、MethodInfo.Invoke は ArrayList へのオブジェクト参照を想定しているため、どれも正常に呼び出されていません。

解決策はありますか?

4

1 に答える 1

1

あなたはそれを十分に簡単に行うことができます。ただし、コメントが正しく述べているようArrayListに、ジェネリック コレクションに切り替えることをお勧めします。

var instance = new ParentClass();
var fieldInfo = instance.GetType().GetProperty("MyList");
var arrayList = fieldInfo.GetValue(instance) as ArrayList;
var count = arrayList.Count;

と:

public class ParentClass
{
    public ArrayList MyList { get; set; }

    public ParentClass()
    {
        MyList = new ArrayList();
    }
}

または、フィールドを使用するクラスに適合させるには (そのフィールドがどこかで初期化されていると仮定します):

var instance = new ParentClass();
var fieldInfo = instance.GetType().GetField("hybridElem");
var arrayList = fieldInfo.GetValue(instance) as ArrayList;
var count = arrayList.Count;
于 2013-01-12T11:26:42.527 に答える