我有一个程序,用户在其中键入要更改的变量的名称。所以我们有这个:
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>
。
答案 0 :(得分:2)
我会使用字典来存储与Jim相关的所有变量,但是你不能创建一个映射为
<string, bool or int or string>
的字典。
当然可以,Dictionary<string, object>
。 string
,bool
和int
都可以存储在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