C#:通过变量引用类

时间:2012-03-22 17:43:20

标签: c# variables syntax

我正试图在C#中使用变量,但遇到了障碍。以下不起作用。

public static void SetBG(string s)
{
    Console.BackgroundColor = ConsoleColor.s;
}

一种非常简单的方法,应根据程序员通过s变量发送的内容设置控制台的背景颜色。如果我使用SetBG("Red");,它应该通过,但事实并非如此。这是因为System.ConsoleColor' does not contain a definition for 's'

我怎样才能在C#中做到这一点?

6 个答案:

答案 0 :(得分:3)

这不是正确的方法,看起来有两个主要概念你遇到了麻烦,理解它们会帮助你正确地做到这一点。

首先,s是您当前班级的变量。 ConsoleColor.s会引用s类中的ConsoleColor变量(它没有,因此您的错误)。这称为scopeencapsulation,允许我们重复使用常见的单词/名称而不会发生冲突。

其次,您的代码将在运行之前进行编译,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;
}