设置字段我试图解决以下问题。我们有一个任意结构的对象和一个表示字段名称的字符串数组。该数组是一个用于使用反射来检索特定字段的路径。然后存在应存储在最终字段中的值。例如,考虑下面的类层次结构:深的任意对象结构
class A {
public int i;
}
class B {
public A a;
}
class C {
public B b;
}
class D {
public C c;
}
比方说,我们得到某种方式的输入:
object obj = GetObject(); // e.g. returns object of type D
List<string> path = GetPathToStore(); // e.g. returns {"c", "b", "a", "i"}
object value = GetValueToBeStored(); // e.g. returns 42
我写了下面的循环:
foreach (string fieldName in path) {
FileInfo fieldInfo = obj.GetType().GetField(fieldName);
obj = fieldInfo.GetValue(obj);
}
然后将是不错的东西像这样:
obj = value;
但是,这只会改变对象中的引用而不是实际的字段。在C + +我会写:
*obj = value;
但如何在C#中做到这一点?
我还需要当路径是在这种情况下,根对象本身需要被分配一个不同的值的空支持的边缘的情况下。
编辑:我的代码实际上使用更复杂的方法来检索成员。路径中的条目不一定是字段名称,它们也可以是属性名称,数组或List中的索引,字典等中的键。因此封装它的类将很复杂。我正在寻找一个更简单的解决方案。
BTW:这是C#编码约定不使用除'readonly'值公共字段。改用属性。它们很便宜: 'public PropTypeA PropA {get;组; }' – chris
我不会设计类,但是我的代码同时支持字段和属性。这只是它的一个简化版本来演示这个问题。不过谢谢你的提示。 –