通过传递名称来获取和设置字段值

我在类中有一个字段,其随机名称如下:

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的,则需要向GetPropertyGetField提供显式的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. } }