使用字符串c#console应用程序调用变量

时间:2016-03-26 15:20:51

标签: c# console-application

有没有办法,如果你有一个包含已定义变量名称的字符串,你可以调用该变量。例如:

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

我如何让用户输入变量名,然后使用字符串来调用该变量?

2 个答案:

答案 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变量将尝试将输入转换为浮点数。如果输入的值不是它所期望的类型,则会抛出异常并打印错误消息。