C#:通过变量引用类

标签 c# variables syntax

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

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

一个非常简单的方法,应该根据程序员通过 s 变量发送的内容来设置控制台的背景颜色。如果我使用 SetBG("Red");,它应该会通过,但它没有。这是因为 System.ConsoleColor' 不包含“s”的定义

我如何在 C# 中执行此操作?

最佳答案

这不是执行此操作的正确方法,看起来您在两个主要概念上遇到了麻烦,理解它们将有助于您正确执行此操作。

首先,s 是您当前类中的一个变量。 ConsoleColor.s 将引用 ConsoleColor 类中的 s 变量(它没有一个,因此你的错误)。这叫做 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);

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

相关文章:

Flutter Android Studio 使大括号换行

C - void 函数(void)、参数和返回值

c# - short 上的一元减号变成了 int?

c# - 将模型属性传递给局部 View

mysql - 更新对 mysql 表的数组响应

javascript - 使用 jQuery 循环设置 css 属性

Python:关于变量范围。为什么我不需要将 x 传递给 Y?

c# - 在 .NET 中使用 S3 存储

c# - Java 和 C# 中 "primitive"、 "value type"、 "struct"、 "class"、 "wrap"的定义

c# - static 和 const 变量之间的区别