如何将变量名称传递给函数并在C#中返回其值?

时间:2017-02-19 10:05:48

标签: c# reflection

我有一个案例,我有几个名字相似但不在数组中的变量。我想要做的是将变量的名称传递给我创建的某个函数,该函数将返回通过其名称传递给函数的变量的值。

例如:

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));
}

1 个答案:

答案 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通常不是最好的设计选择,因为它不能很好地运行。如果性能至关重要,我建议您尝试提出一种设计,不要求您按名称查找值,以避免产生性能影响。