我有一个对象的值,我试图通过Reflection设置。
该对象具有以下索引器:
protected internal object this[string propertyName] { get; set; }
我想在此集合中设置一个值 - 例如,如果实例包含name
键,我想设置值。
如果索引器为public
,它将如下所示:myObj["Name"] = "foo"
。
有趣的是,如果我处于调试模式,我可以看到我要设置myObj.Item["Name"]
的项目,但如果我编码
myObj.GetType().GetProperty("Item")
它返回Null
。
如何使用Reflection设置此值?
答案 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
存储的对象的值。