使用符号表示数组访问C#类变量?

时间:2014-04-23 17:32:06

标签: c# class

我有一个程序,用户在其中键入要更改的变量的名称。所以我们有这个:

string user_input = "age";

我有一节课有以下内容:

class Jim{
    public static int age = 10;
    public static bool married = false;
    public static string name = "John";
} 

我现在想要打印用户输入的变量的值。因此,用户输入age后,我想打印Jim.age。如何将user_input转换为允许我访问该类的内容。我真的想在JS中做Jim[input_string],但我相信这是可能的。

我会使用字典存储与Jim相关联的所有变量,但您无法制作Dictionary,其映射为<string, bool or int or string>

2 个答案:

答案 0 :(得分:2)

  

我会使用字典来存储与Jim相关的所有变量,但是你不能创建一个映射为<string, bool or int or string>的字典。

当然可以,Dictionary<string, object>stringboolint都可以存储在object类型的变量中。

答案 1 :(得分:0)

执行此操作的常规方法是使用反射:

FieldInfo requestedField = typeof(Jim).GetField("age");
Console.WriteLine(requestedField.GetValue(instanceOfJim));

不幸的是,你不能这样做,因为你的变量是静态的。让他们成为实例成员,它会工作。正如评论者所指出的那样,允许用户进行反射并不是一个好主意,因此您可能希望重新考虑用例。

您也可以使用映射到对象的字典,如Servy建议的那样。

有趣的是,只要将方法放在Jim类中,它就可以使用static:

class Jim
{
   ...Member variables...
   public static GetMember(String name)
   {
      FieldInfo requestedField = typeof(Jim).GetField(name);
      return requestedField.GetValue(null);
   }
}

同样,不推荐这个,但它会获得你想要的功能。

如果您想知道,FieldInfo.GetValue的MSDN:MSDN