Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#:通过变量引用类_C#_Variables_Syntax - Fatal编程技术网

C#:通过变量引用类

C#:通过变量引用类,c#,variables,syntax,C#,Variables,Syntax,我试图掌握在C#中使用变量的诀窍,但遇到了一个障碍。下面的方法不起作用 public static void SetBG(string s) { Console.BackgroundColor = ConsoleColor.s; } 一个非常简单的方法,它应该根据程序员通过s变量发送的内容设置控制台的背景颜色。如果我使用了SetBG(“红色”),它应该通过,但它没有。这是因为System.ConsoleColor'不包含“s”的定义。 如何在C#中执行此操作?控制台颜色是一个枚举。你必

我试图掌握在C#中使用变量的诀窍,但遇到了一个障碍。下面的方法不起作用

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


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

控制台颜色是一个枚举。你必须投下
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=“船”),比如这样的

 ConsoleColor colorValue;
 if (Enum.TryParse(s, out colorValue))
 {        
     Console.BackgroundColor = colorValue;
 }

为了增加其他人对的使用,从.NET 4.0开始,您可以使用来更好地处理无效值:

public static void SetBG(string s)
{
    ConsoleColor color;

    if (!Enum.TryParse<ConsoleColor>(s, out color))
        throw new ArgumentException("s");

    Console.BackgroundColor = color;
}
publicstaticvoidsetbg(字符串s)
{
控制台颜色;
如果(!Enum.TryParse(s,out color))
抛出新参数异常(“s”);
Console.BackgroundColor=颜色;
}

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

首先,
s
是当前类中的一个变量
ConsoleColor.s
将引用
ConsoleColor
类中的
s
变量(它没有变量,因此会出现错误)。这被称为,或,并允许我们在不冲突的情况下重用常用词/名称

其次,您的代码将在运行之前进行编译,
ConsoleColor.s
(假设有这样的东西)将不再说
ConsoleColor.s
。相反,它将指向内存中存储表示“s”的值的位置。传递给方法的
s
将是一个字符串,例如“红色”或“蓝色”。这样的字符串和内存中用于不同对象存储其值的插槽之间没有连接

要做你想做的事情,你需要把颜色的名字翻译成一种颜色。一种方法是使用一系列
if
/
else
语句检查字符串的内容,并在与颜色名称匹配时指定适当的颜色。
幸运的是,有一个更简单的方法。您只需将字符串解析为
控制台颜色

您可以执行以下操作:

Console.BackgroundColor = (ConsoleColor) Enum.Parse(typeof(ConsoleColor), s);

谢谢你的详细回复!但是,我的编译器给了我一个错误:
名称“Color”在当前上下文中不存在
,我猜这是一个库问题。我需要包括哪些库?到目前为止,我有:
使用系统;使用System.Collections.Generic;使用System.Linq;使用系统文本编辑:抱歉,换行符在注释中不起作用。您可以在
系统中找到
Color
。绘图
namespace显示“在系统名称空间中找不到绘图,是否缺少部件引用?”。这是一个控制台应用程序,因此我假设默认情况下不包括图形库。这是一个很好的答案,但您无法将
颜色
转换为
控制台颜色
。您最好调用
Color.FromName.ToKnownColor()
,并尝试将其匹配到
ConsoleColor
值……或者,正如其他答案所示,只需将
s
解析为
ConsoleColor
,您就可以开始使用正确的类型。我几乎否决了这种想法,认为它甚至不会编译,但它确实有效,所以我会投票。起初我以为“在
ConsoleColor
enumeration!”上没有定义
TryParse
方法,但实际上有。由于
ConsoleColor
的基类是
Enum
,因此可以通过基类或子类调用静态
Enum.TryParse
方法。这可能是一种令人困惑的方法来调用该方法(无论如何,它让我绊倒了),但它确实有效。不管是谁否决了这个答案,都应该自己尝试代码。我也是出于同样的原因否决的。我也试过了。现在锁上了。很抱歉如果答案被编辑而我被解锁,我将更改它:(
public static void SetBG(string s)
{
    ConsoleColor color;

    if (!Enum.TryParse<ConsoleColor>(s, out color))
        throw new ArgumentException("s");

    Console.BackgroundColor = color;
}
Console.BackgroundColor = (ConsoleColor) Enum.Parse(typeof(ConsoleColor), s);