如果您有一个包含已定义变量名称的字符串,那么您可以调用该变量吗。例如:
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
如何让用户输入变量名,然后使用字符串调用该变量?
虽然这在C#中不直接实现,但可以通过使用以字符串为键、以泛型类型为值的Dictionary来实现这种效果。这里没有上下文,但可能是一种更好的方法,可以在不进行这种变量引用的情况下实现您想要的内容。
编辑:这是Dictionary对象的MSDN文档,它可能对您可以使用该类型执行的操作有所了解。
下面是一个使用字典实现您在问题中提供的代码的示例片段。只需将变量的名称和变量的初始值添加到字典中(通过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
作为字典值所做的复杂处理,你可以简单地将字典定义为Dictionary<string, string> vals = new Dictionary<string, string>()
,将dynamic
行更改为string newval = Console.ReadLine();
。try/catch和Convert.ChangeType的要点是,如果你想使用不同类型的变量,这将尝试转换从控制台接收的输入(这是一个字符串),并将其转换为它从字典中期望的指定键的变量类型。例如,请求Hello
变量会将动态变量转换为字符串,而请求FloatVal
变量会尝试将输入转换为浮点值。如果输入的值不是它期望的类型,它将抛出异常并打印错误消息。
您的问题的实际价值尚不清楚。出于您所描述的目的,您可以使用Dictionary
对象(像<string, string>
这样的键值)并对其进行操作:例如,如果User提供了Key
,那么您可以修改Value
或编写一个包含该Value
的字符串,与您的业务逻辑相关。
以下是与Console应用程序中的类似用例相关的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();
希望这能有所帮助。