【发布时间】:2018-07-19 22:51:21
【问题描述】:
想象下面的“路径”:
MyObject.MyFirstList[0].MySecondList[0].MyProperty = "你好"
MyProperty 是字符串类型。 在编译时没有任何类型是已知的,只有在运行时通过程序集的反射才知道。
我拥有一切,但我无法使用 SetValue 在第一个列表上设置第二个列表。我总是得到空引用异常或“目标类型不匹配”。
到目前为止我所尝试的:
迭代1:
var constructedList = Activator.CreateInstance(constructedListType);
target.GetType().GetProperty(propertyToAdd).SetValue(target, constructedList)
迭代 2:
同样的方法,同样有效。所以现在我们有了 MyObject.MyFirstList[0].MySecondList[]
迭代 3:TODO:创建 MySecondList 的第一个对象的实例并将其 MyProperty-property 设置为创建的属性:
var target = Activator.CreateInstance(typeOfItem);
target.GetType().GetProperty(propertyToAdd)?.SetValue(target, null);
所以总结一下这个问题:
这行得通:
someInstance.GetType().GetProperty(someProperty).SetValue(someInstance, objToSet);
为什么这样的事情不起作用?或者是 - 如果是,如何?
someInstance.GetType().GetProperty(someList.listInsideSomeList.finalProperty).SetValue(...);
【问题讨论】:
-
展示你目前为实现这一目标所做的尝试。
标签: c# list generics reflection