我正在使用c#实现我自己的ORM,我需要使所有方法和字段尽可能通用。
我已声明一个随机类。此类有两个字段,其中一个是列表(Person类和邻居列表)。
我想获取某些类实例的字段值。这是我要获取字段值的功能:函数(对象o)。
我可以轻松获得此人年龄的值,但是由于“调用”功能返回“对象”,因此无法遍历邻居列表。
class Person {
private int _age {get; set; }
private LinkedList<Neighbour> _neighbours {get; set;};
....
}
public void function(object o){
Type type = o.GetType();
PropertyInfo[] props = type.GetProperties(BindingFlags.NonPublic | BindingFlags.Instance);
foreach (PropertyInfo prp in props)
{
MethodInfo strGetter = prp.GetGetMethod(nonPublic: true);
var val = strGetter.Invoke(o, null);
// Here I want to iterate over "val", which contains value of the field (in my case: _neighbours)
}
}
public int main(){
function(new Person(/* age */, /*some LinkedList*/));
}
将其转换为:
LinkedList<object> val = (LinkedList<object>) str.Getter.Invoke(0, null)
无效,因为它说不能将类型'object'转换为'Neighbour'。
如何迭代该集合?