我试图掌握在 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 将引用 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);

关于C#:通过变量引用类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9827658/

10-10 05:11