设置反射中嵌套字段的值



在使用反射的应用程序中,我有两个类

public class FirstClass
{
   public string someVar;
   public SecondClass second;   
   public FirstClass()
   {
      second = new SecondClass();
   }
} 
public class SecondClass
{
   public string anotherVar;
}

在我的主程序中,我有一个FirstClass 的实例

MainProgram()
{
   Object obj = InstanceOfFirstClass() // reflected instance of first class
}

如何在obj中设置另一个Var的值?

对于公共字段,这相对简单:

    object obj = InstanceOfFirstClass();
    object second = obj.GetType().GetField("second").GetValue(obj);
    second.GetType().GetField("anotherVar").SetValue(second, "newValue");

如果字段不是公共字段,则需要使用GetField的重载,该重载接受设置了NonPublic标志的BindingFlags参数。

在.Net 4中,您可以只使用dynamic:

dynamic obj = InstanceOfFirstClass();
obj.second.anotherVar = "newValue";

您可以在中找到读取字段并通过反射设置字段值的示例http://msdn.microsoft.com/en-us/library/6z33zd7h.aspx.在你的情况下,它看起来像

    Object myObject = InstanceOfFirstClass() // reflected instance of first class
    Type myType = typeof(FirstClass);
    FieldInfo myFieldInfo = myType.GetField("second", 
        BindingFlags.Public | BindingFlags.Instance); 
    // Change the field value using the SetValue method. 
    myFieldInfo.SetValue(myObject , //myobject is the reflected instance
    value);//value is the object which u want to assign to the field);

相关内容

  • 没有找到相关文章

最新更新