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#中做到这一点?

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);
ConsoleColor是一个枚举。你必须投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;
}