在我的代码中,我在ParentClass
中声明了一个ArrayListpublic class ParentClass {
...
public ArrayList hybridElem;
...
然后使用从ParentClass运行的Reflection,我能够成功获得此ArrayList @ runtime的FieldInfo。
使用该FieldInfo,我希望能够添加或读取hybridElem中的元素。 我能够获得ArrayList的所有相关PropertyInfo,如.Item,.Count,.ToArray等等......还可以获得这些属性的getter和setter。
不幸的是,没有一个被成功调用,因为MethodInfo.Invoke期望对ArrayList的Object引用
任何解决方案?
答案 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;