有没有办法,如果你有一个包含已定义变量名称的字符串,你可以调用该变量。例如:
string Hello = "Hello";
Console.WriteLine("What is the name if the variable?");
userInput = Console.ReadLine();
userInput.Replace('Hello', 'Hi'); <---//This would replace the value of Hello not the value of userInput
我如何让用户输入变量名,然后使用字符串来调用该变量?
答案 0 :(得分:1)
你的问题的实际价值尚不清楚。出于您所描述的目的,您可以使用Dictionary
对象(键值如<string, string>
)并对其进行操作:例如,如果用户提供Key
,则可以修改Value
或撰写包含与您的业务逻辑相关的Value
的字符串。
以下是与控制台应用中类似用例相关的Dictionary
对象的示例用法:
Dictionary<string, string> names = new Dictionary<string, string>
{
{"1", "John"},
{"2", "Anna"},
{"3", "Gary"},
{"4", "Jacob"},
{"5", "Jennifer"}
};
Console.WriteLine("What is your ID?");
string userInput = Console.ReadLine();
if (names.Keys.Contains(userInput))
{
Console.WriteLine("Hello " + names[userInput] + "! Nice to see you online.");
}
else
{
Console.WriteLine("Sorry, this is not a valid ID. Bye.");
}
Console.WriteLine("Press any key to exit.");
Console.ReadKey();
希望这可能会有所帮助。
答案 1 :(得分:1)
虽然在C#中不能直接实现这一点,但您可以通过使用字符串作为键并将泛型类型作为值来实现此效果。没有上下文,但可能是一种更好的方法来实现你想要的,而不需要进行这种变量引用。
修改:Here is the MSDN documentation for a Dictionary object,可能会对您可以使用该类型执行的操作有所了解。
以下是使用字典实现您在问题中提供的代码的示例代码段。只需将变量名称和变量的初始值添加到字典中(通过vars.Add(key, value)
方法或vars["UniqueKeyName"] = value;
)。在我的示例中,用户只能在程序开始之前修改程序中已存在的密钥。
static void Main(string[] args) {
Dictionary<string, object> vars = new Dictionary<string, object>();
vars.Add("Hello", "Hello");
vars.Add("KeyTwo", 4);
vars.Add("FloatVal", 8.6f);
Console.WriteLine("What is the name of the variable?");
string varname = Console.ReadLine();
if (vars.ContainsKey(varname))
{
Console.WriteLine("What is the new value to set that variable to?");
Type t = vars[varname].GetType();
try
{
dynamic newval = Convert.ChangeType(Console.ReadLine(), t);
vars[varname] = newval;
Console.WriteLine("{0} is now {1}", varname, vars[varname]);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
else
{
Console.WriteLine("That variable does not exist.");
}
Console.ReadKey();
}
如果你可以保证你总是想要使用字符串变量,那么你不需要使用object
作为字典值的复杂性,你可以简单地将字典定义为{{1 },将Dictionary<string, string> vals = new Dictionary<string, string>()
行更改为dynamic
。 try / catch和Convert.ChangeType的要点是如果你想使用不同类型的变量,这将尝试转换从控制台接收的输入(这是一个字符串)并将其转换为它所期望的变量的类型从字典中获取指定的键。例如,要求string newval = Console.ReadLine();
变量,将动态变量转换为字符串,要求Hello
变量将尝试将输入转换为浮点数。如果输入的值不是它所期望的类型,则会抛出异常并打印错误消息。