通过传递名称来获取和设置字段值
我在类中有一个字段,其随机名称如下:
class Foo { public string a2de = "e2" }
我在另一个变量中有这个字段的名称,如:
string vari = "a2de"
我可以使用a2de
的值来获取或设置字段a2de
的值吗?
喜欢:
getvar(vari)
要么
setvar(vari) = "e3"
你必须使用reflection。
要获取targetObject
上的属性值:
var value = targetObject.GetType().GetProperty(vari).GetValue(targetObject, null);
要获得字段的值,它是类似的:
var value = targetObject.GetType().GetField(vari).GetValue(targetObject, null);
如果属性/字段不是公共的或者是从基类inheritance的,则需要向GetProperty
或GetField
提供显式的BindingFlags
。
您可以使用reflection (例如Type.GetField
等) 来实现它 – 但这通常应该是最后的手段。
您是否考虑使用Dictionary
并使用“变量名称”作为键?
您必须使用Reflection来按名称访问变量。 像这样:
class Foo { int namedField = 1; string vari = "namedField" void AccessField() { int val = (int) GetType().InvokeMember(vari, BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.GetField, null, this, null); // now you should have 1 in val. } }