[英]C#: Referencing Classes by a Variable
我试图在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
会引用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是枚举,请尝试
Console.BackgroundColor = (ConsoleColor) Enum.Parse(typeof(ConsoleColor), s);
如果字符串无效(例如s =“Ship”),你应该考虑处理这样的事情
ConsoleColor colorValue;
if (Enum.TryParse(s, out colorValue))
{
Console.BackgroundColor = colorValue;
}
ConsoleColor colour;
if (ConsoleColor.TryParse(s, out colour))
{
Console.BackgroundColor = colour;
}
只是为了添加其他人对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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.