1

在我的代码中,我在 ParentClass 中声明了一个 ArrayList

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

然后使用从 ParentClass 运行的反射,我能够成功获取此 ArrayList @运行时的 FieldInfo。

使用该 FieldInfo,我希望能够从 hybridElem 添加或读取元素。我能够获得 ArrayList 的所有相关 PropertyInfo,例如 .Item、.Count、.ToArray 等……并且还可以获得这些属性的 getter 和 setter。

不幸的是,它们都没有被成功调用,因为 MethodInfo.Invoke 期望 Object 引用 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 回答