我有一个领域一样设置字段值:获取并通过一类具有随机名称传递名称
string vari = "a2de"
:
class Foo {
public string a2de = "e2"
}
我喜欢另外一个变量有此字段的名称
可以通过使用值vari
获取或设置字段a2de
的值吗?
喜欢:
getvar(vari)
或
setvar(vari) = "e3"
我有一个领域一样设置字段值:获取并通过一类具有随机名称传递名称
string vari = "a2de"
:
class Foo {
public string a2de = "e2"
}
我喜欢另外一个变量有此字段的名称
可以通过使用值vari
获取或设置字段a2de
的值吗?
喜欢:
getvar(vari)
或
setvar(vari) = "e3"
你必须使用反射。
要获得targetObject
属性的值:
var value = targetObject.GetType().GetProperty(vari).GetValue(targetObject, null);
为了得到一个字段的值,它类似于:
var value = targetObject.GetType().GetField(vari).GetValue(targetObject, null);
如果属性/字段不公开或已被继承自基类,则需要提供明确的BindingFlags
至GetProperty
或GetField
。
您可以可能与反射(例如Type.GetField
等)做到这一点 - 但通常应该是最后的手段。
您是否考虑过使用Dictionary<string, string>
并将“变量名”用作关键字?
如果这篇文章谈论的是__local__变量而不是类型字段,那么这是行不通的。 – bradgonesurfing 2017-01-26 08:35:25
@bradgonesurfing:的确如此。现在,我认为我们会坚持在问题中提供更多细节。 – 2017-01-26 09:00:29
没问题。我只是在这里结束,因为另一个用户在这里提到你的答案,作为权威证明,可以通过反射修改局部变量。 http://stackoverflow.com/q/41867476/158285 – bradgonesurfing 2017-01-26 09:10:39
您必须使用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.
}
}
'+ 1'感谢分享!今天保存我的屁股:) – Anne 2012-12-24 02:38:12
尝试反射以实现这一目标。 – 2011-03-07 10:43:27
我觉得你有点混淆术语(例如;什么是*变量在另一个变量*?)请提供一个更全面的代码示例,显示你想要做什么。 – 2011-03-07 10:44:23