如何使用FieldInfo(反射)在ArrayList上调用方法

时间:2013-01-12 10:44:13

标签: c# reflection

在我的代码中,我在ParentClass

中声明了一个ArrayList
public class ParentClass {
...
public ArrayList hybridElem; 
...

然后使用从ParentClass运行的Reflection,我能够成功获得此ArrayList @ runtime的FieldInfo。

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

不幸的是,没有一个被成功调用,因为MethodInfo.Invoke期望对ArrayList的Object引用

任何解决方案?

1 个答案:

答案 0 :(得分: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;