我在类中有一个字段,其随机名称如下:
class Foo {
public string a2de = "e2"
}
我在另一个变量中有这个字段的名称,如:
string vari = "a2de"
我可以使用a2de
的值来获取或设置字段vari
的值吗?
像:
getvar(vari)
或
setvar(vari) = "e3"
答案 0 :(得分:9)
你必须使用反射。
要在targetObject
上获取属性的值:
var value = targetObject.GetType().GetProperty(vari).GetValue(targetObject, null);
要获得字段的值,它是相似的:
var value = targetObject.GetType().GetField(vari).GetValue(targetObject, null);
如果属性/字段不是公共的或已从基类继承,则需要向BindingFlags
或GetProperty
提供明确的GetField
。
答案 1 :(得分:5)
可以使用反射(例如Type.GetField
等)进行 - 但这通常应该是最后的手段。
您是否考虑过使用Dictionary<string, string>
并使用“变量名称”作为密钥?
答案 2 :(得分:1)
您必须使用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.
}
}