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

Luc*_*oli 4 c# reflection field

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

class Foo {
    public string a2de = "e2"
}
Run Code Online (Sandbox Code Playgroud)

我在另一个变量中有这个字段的名称,如:

string vari = "a2de"
Run Code Online (Sandbox Code Playgroud)

我可以a2de使用值来获取或设置字段的值vari吗?

喜欢:

getvar(vari)
Run Code Online (Sandbox Code Playgroud)

要么

setvar(vari) = "e3"
Run Code Online (Sandbox Code Playgroud)

Jon*_*Jon 9

你必须使用反射.

要获取属性的值,请执行以下操作targetObject:

var value = targetObject.GetType().GetProperty(vari).GetValue(targetObject, null);
Run Code Online (Sandbox Code Playgroud)

要获得字段的值,它是类似的:

var value = targetObject.GetType().GetField(vari).GetValue(targetObject, null);
Run Code Online (Sandbox Code Playgroud)

如果属性/字段不是公共的或已从基类继承,则需要提供显式的BindingFlagsto GetPropertyGetField.


Jon*_*eet 5

可以反射(例如Type.GetField等)来做这件事- 但这通常应该是最后的手段.

您是否考虑使用Dictionary<string, string>并使用"变量名称"作为密钥?