我有一个实例Account
班级。每个帐户对象都有一个所有者、引用等。
我访问帐户属性的一种方法是通过访问器,例如
account.Reference;
但我希望能够使用动态字符串选择器访问它,例如:
account["PropertyName"];
就像 JavaScript 中一样。所以我会account["Reference"]
这将返回值,但我也希望能够在之后分配一个新值,例如:
account["Reference"] = "124ds4EE2s";
我注意到我可以使用
DataBinder.Eval(account,"Reference")
获取基于字符串的属性,但使用它我无法为该属性分配值。
知道我该怎么做吗?
首先,你应该避免使用这个; C# 是一种强类型语言,因此请充分利用该方面带来的类型安全和性能优势。
如果您有正当理由动态获取和设置属性的值(换句话说,当类型和/或属性名称无法在代码中定义时),那么您必须使用反射。
最内联的方式是这样的:
object value = typeof(YourType).GetProperty("PropertyName").GetValue(yourInstance);
...
typeof(YourType).GetProperty("PropertyName").SetValue(yourInstance, "value");
但是,您可以缓存PropertyInfo
对象以使其更具可读性:
System.Reflection.PropertyInfo prop = typeof(YourType).GetProperty("PropertyName");
object value = prop.GetValue(yourInstance);
...
prop.SetValue(yourInstance, "value");
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)