C#:通过变量引用类
本文关键字:引用 变量 | 更新日期: 2023-09-27 18:28:47
我试图掌握在C#中使用变量的窍门,但遇到了障碍。以下内容不起作用。
public static void SetBG(string s)
{
Console.BackgroundColor = ConsoleColor.s;
}
一个非常简单的方法,应该根据程序员通过s
变量发送的内容来设置控制台的背景颜色。如果我使用SetBG("Red");
,它应该通过,但它没有。这是因为System.ConsoleColor' does not contain a definition for 's'
。
我如何在C#中做到这一点?
这不是正确的方法,而且似乎有两个主要概念你遇到了麻烦,理解它们将有助于你正确地做到这一点。
首先,s
是当前类中的一个变量。ConsoleColor.s
将引用ConsoleColor
类中的s
变量(它没有,因此您会出错)。这被称为范围或封装,允许我们在不冲突的情况下重用常用词/名称。
其次,您的代码将在运行之前进行编译,ConsoleColor.s
(假设有这样的东西)将不再说ConsoleColor.s
。相反,它会指向内存中存储表示"s"的值的位置。传递给方法的s
将是一个字符串,例如"Red"或"Blue"。这样的字符串和不同对象存储其值的内存槽之间没有连接。
要做你想做的事情,你需要取颜色的名称并将其翻译成一种颜色。一种方法是使用一系列if
/else
语句检查字符串的内容,并在字符串与颜色名称匹配时指定适当的颜色
幸运的是,有一种更简单的方法。您可以简单地将字符串解析为ConsoleColor
!
按照MSDN中的示例,您可以执行以下操作:
Console.BackgroundColor = (ConsoleColor) Enum.Parse(typeof(ConsoleColor), s);
Console.BackgroundColor = (ConsoleColor)Enum.Parse(typeof (ConsoleColor), s);
s
。
public static void SetBG(string s){
Console.BackgroundColor = (ConsoleColor) Enum.Parse(typeof(ConsoleColor), s);
}
ConsoleColor colour;
if (ConsoleColor.TryParse(s, out colour))
{
Console.BackgroundColor = colour;
}
这是因为ConsoleColor是一个枚举,请尝试
Console.BackgroundColor = (ConsoleColor) Enum.Parse(typeof(ConsoleColor), s);
如果字符串无效(例如s="Ship"),您应该考虑使用类似的东西进行处理
ConsoleColor colorValue;
if (Enum.TryParse(s, out colorValue))
{
Console.BackgroundColor = colorValue;
}
只是为了增加其他人对Enum.Parse
方法的使用,从.NET 4.0开始,您可以使用Enum.TryParse
通用方法来更好地处理无效值:
public static void SetBG(string s)
{
ConsoleColor color;
if (!Enum.TryParse<ConsoleColor>(s, out color))
throw new ArgumentException("s");
Console.BackgroundColor = color;
}