使用Reflection在类中使用受保护的内部索引设置值

时间:2014-01-23 05:22:28

标签: .net reflection system.reflection

我有一个对象的值,我试图通过Reflection设置。

该对象具有以下索引器:

protected internal object this[string propertyName] { get; set; }

我想在此集合中设置一个值 - 例如,如果实例包含name键,我想设置值。

如果索引器为public,它将如下所示:myObj["Name"] = "foo"

有趣的是,如果我处于调试模式,我可以看到我要设置myObj.Item["Name"]的项目,但如果我编码 myObj.GetType().GetProperty("Item")它返回Null

如何使用Reflection设置此值?

1 个答案:

答案 0 :(得分:0)

要使用反射获取内部(或非公共)属性,您需要提供正确的BindingFlags集。

正确的设定将是(不限于)

  • BindingFlags.NonPublic
  • BindingFlags.Instance

如。

var property = myObj.GetType().GetProperty("Item", BindingFlags.Instance | BindingFlags.NonPublic);

现在调用该集添加一个可以调用的新值。

property.SetValue(myObj, "Foo", new object[] { "bar" });

这相当于调用myObj["Foo"] = "bar";

要从索引器中获取值,您可以调用。

var value = property.GetValue(myObj, new object[] { "Name" });

将返回使用索引键Name存储的对象的值。

More on BindingFlags ON MSDN