如何在C#中拥有动态属性
c#
我正在创建一种方法,该方法允许我在控制台中打印消息并能够以相同的方法更改消息的颜色。
我发送 2 个参数来执行此操作,message(这是在控制台中打印的消息)和color(这是我想在控制台中打印的颜色)
我有这样的代码:
public void Write(string message, string color = "White"){
Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine(message);
}
但我需要ConsoleColor.White抢我的动态色彩如下(类似于JavaScript的)ConsoleColor [color];
我怎样才能做到这一点?提前致谢。我试过的是上面的:ConsoleColor[color];
回答
ConsoleColor是一个枚举,所以通常的方法是将 aConsoleColor作为第二个参数:
public void Write(string message, ConsoleColor color = ConsoleColor.White){
Console.ForegroundColor = color;
Console.WriteLine(message);
}
如果你真的需要它是一个字符串,你可以使用Enum.Parse,但是如果调用者传递一个无效的颜色值,这会冒转换失败的风险:
public void Write(string message, string color = "White"){
Console.ForegroundColor = Enum.Parse<ConsoleColor>(color);
Console.WriteLine(message);
}
或者,如果您想要一个不会抛出错误值的版本:
public void Write(string message, string color = "White"){
Console.ForegroundColor = Enum.TryParse<ConsoleColor>(color, out ConsoleColor parsedColor)
? parsedColor : ConsoleColor.White;
Console.WriteLine(message);
}
- You are better off putting in an extra line of code and using `Enum.TryParse`. That way if someone enters `BeautifulRed`, you can sense the error (and, it has a generic version that takes the enum type)