如何在C#中使用字符串作为方法名?

时间:2017-09-13 22:44:17

标签: c#

我做了一个简短的方法,可以更容易地更改控制台颜色。

string c = red;
if (c == "red")
    Console.ForegroundColor = ConsoleColor.Red;

我对每种颜色都有这个。我可以只在方法中键入颜色并使用字符串作为颜色名称吗?像:

string c = Red;
Console.ForegroundColor = ConsoleColor.c;

因此我不需要指定每种颜色。我希望你明白我的意思。

3 个答案:

答案 0 :(得分:4)

我认为您正在寻找Enum.TryParse方法,该方法将使用字符串并尝试将其转换为枚举值(在您使用ConsoleColor枚举的情况下)。如果解析成功,则该方法返回trueout参数将包含转换后的值;否则返回false

以下是一个采用字符串并在转换成功时更改控制台颜色的方法示例:

static bool TryChangeConsoleForeColor(string newColor)
{
    ConsoleColor foreColor;

    if (Enum.TryParse(newColor, true, out foreColor))
    {
        Console.ForegroundColor = foreColor;
        return true;
    }

    return false;
}

<强>用法

static void Main()
{
    string color = "Red";

    Console.WriteLine($"Changing color to '{color}'...");
    TryChangeConsoleForeColor(color); // Ignores return value

    color = "Car";

    Console.WriteLine($"Changing color to '{color}'...");
    if (!TryChangeConsoleForeColor(color))
    {
        // Do something if TryChange fails
        Console.WriteLine($"Cannot change color to '{color}'");
    }

    Console.ResetColor();
    Console.Write("\nDone!\nPress any key to exit...");
    Console.ReadKey();
}

<强>输出

enter image description here

答案 1 :(得分:2)

我认为这可能对您有用:

    string color = "Red";
    Console.ForegroundColor = (ConsoleColor)System.Enum.Parse(typeof(ConsoleColor), color);

答案 2 :(得分:0)

这不会直接回答你的问题,但也许它可能引导你朝着正确的方向前进。

如果你真的想去那么远,你可以创建一个颜色服务,它具有颜色的属性名称。

如果你采用枚举路线,这些文章可能有所帮助。

https://msdn.microsoft.com/en-us/library/16c1xs4z(v=vs.110).aspx

https://msdn.microsoft.com/en-us/library/system.enum.isdefined(v=vs.110).aspx