我正试图在C#中使用变量,但遇到了障碍。以下不起作用。
public static void SetBG(string s)
{
Console.BackgroundColor = ConsoleColor.s;
}
一种非常简单的方法,应根据程序员通过s
变量发送的内容设置控制台的背景颜色。如果我使用SetBG("Red");
,它应该通过,但事实并非如此。这是因为System.ConsoleColor' does not contain a definition for 's'
。
我怎样才能在C#中做到这一点?
答案 0 :(得分:3)
这不是正确的方法,看起来有两个主要概念你遇到了麻烦,理解它们会帮助你正确地做到这一点。
首先,s
是您当前班级的变量。 ConsoleColor.s
会引用s
类中的ConsoleColor
变量(它没有,因此您的错误)。这称为scope或encapsulation,允许我们重复使用常见的单词/名称而不会发生冲突。
其次,您的代码将在运行之前进行编译,ConsoleColor.s
(假设有这样的事情)将不再说ConsoleColor.s
。相反,它将指向存储器中存储表示“s”的值的位置。传递给您的方法的s
将是一个字符串,例如“Red”或“Blue”。这样的字符串和内存中的插槽之间没有连接,以便不同的对象存储它的值。
要执行您要执行的操作,您需要获取颜色的名称并将其转换为颜色。一种方法是使用一系列if
/ else
语句检查字符串的内容,并在匹配颜色名称时指定适当的颜色。
幸运的是,有一种更简单的方法。您只需将字符串解析为ConsoleColor
!
关注the example from MSDN,您可以这样做:
Console.BackgroundColor = (ConsoleColor) Enum.Parse(typeof(ConsoleColor), s);
答案 1 :(得分:2)
Console.BackgroundColor = (ConsoleColor)Enum.Parse(typeof (ConsoleColor), s);
答案 2 :(得分:2)
ConsoleColor是一个枚举。您必须投射s
。
public static void SetBG(string s){
Console.BackgroundColor = (ConsoleColor) Enum.Parse(typeof(ConsoleColor), s);
}
答案 3 :(得分:2)
这是因为ConsoleColor是枚举,请尝试
Console.BackgroundColor = (ConsoleColor) Enum.Parse(typeof(ConsoleColor), s);
如果字符串无效(例如s =" Ship"),你应该考虑处理这样的事情
ConsoleColor colorValue;
if (Enum.TryParse(s, out colorValue))
{
Console.BackgroundColor = colorValue;
}
答案 4 :(得分:2)
ConsoleColor colour;
if (ConsoleColor.TryParse(s, out colour))
{
Console.BackgroundColor = colour;
}
答案 5 :(得分:1)
只是为了添加其他人对Enum.Parse
method的使用,从.NET 4.0开始,您可以使用Enum.TryParse
generic method来更好地处理无效值:
public static void SetBG(string s)
{
ConsoleColor color;
if (!Enum.TryParse<ConsoleColor>(s, out color))
throw new ArgumentException("s");
Console.BackgroundColor = color;
}