我有一个案例,我有几个名字相似但不在数组中的变量。我想要做的是将变量的名称传递给我创建的某个函数,该函数将返回通过其名称传递给函数的变量的值。
例如:
int valueByName(int x, string variableName){
string newVar;
string numString = x.ToString();
newVar = variableName + numString;
//and here i should get the value of newVar and return it to use it. but how?
return valeuof(newVar);???
}
int num1 = 1;
int num2 = 2;
int num3 = 3;
string varName = "num";
for(int i = 1; i < 4; i++){
Console.WriteLine(valueByName(i, varName));
}
答案 0 :(得分:4)
您可以使用.NET Reflection:
执行此操作public class Foo
{
private int field1 = 1;
private int field2 = 2;
private int field3 = 3;
public int GetValueOf(string field)
{
FieldInfo f = this.GetType().GetTypeInfo().GetField(field,
BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
return (int)f.GetValue(this);
}
}
var x = new Foo();
var y = x.GetValueOf("field2");
// y has value of 2
注意: .NET Reflection通常不是最好的设计选择,因为它不能很好地运行。如果性能至关重要,我建议您尝试提出一种设计,不要求您按名称查找值,以避免产生性能影响。