使用字符串c#调用变量控制台应用程序



如果您有一个包含已定义变量名称的字符串,那么您可以调用该变量吗。例如:

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();

希望这能有所帮助。

最新更新