Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.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#_If Statement_Switch Statement_Case - Fatal编程技术网

C# 如何使用开关盒(如有)?

C# 如何使用开关盒(如有)?,c#,if-statement,switch-statement,case,C#,If Statement,Switch Statement,Case,我想在我的代码中像if一样使用switch,但我不知道如何使用&&以防万一! 这是我的密码 string a; a = System.Convert.ToString(textBox1.Text); if (a.Contains('h') && a.Contains('s')) { this.BackColor=Color.Red; } else if (a.Contains('r') && a.Contains('z')) { this.Ba

我想在我的代码中像if一样使用switch,但我不知道如何使用&&以防万一! 这是我的密码

string a;
a = System.Convert.ToString(textBox1.Text);

if (a.Contains('h') && a.Contains('s'))
{
    this.BackColor=Color.Red;
}
else if (a.Contains('r') && a.Contains('z')) 
{
    this.BackColor=Color.Black;

}

else if (a.Contains('a') && a.Contains('b'))
{
    this.BackColor = Color.Pink;

}

如果您可以使用更高版本的C#,您可以这样编写:

switch (st)
{
     case var s when s.Contains("asd") && s.Contains("efg"):
         Console.WriteLine(s);
         break;
     case var s when s.Contains("xyz"):
         break;
     // etc.
}
在您的特定情况下,不需要引入新的局部变量(
s
),因此代码可以按如下方式编写

switch(st)
{
     case var _ when st.Contains("asd") && st.Contains("efg"):
         Console.WriteLine(st);
         break;
     case var _ when st.Contains("xyz"):
         break;
     // etc.
}

您可以在上阅读。

如果您可以使用更高版本的C#您可以这样编写:

switch (st)
{
     case var s when s.Contains("asd") && s.Contains("efg"):
         Console.WriteLine(s);
         break;
     case var s when s.Contains("xyz"):
         break;
     // etc.
}
在您的特定情况下,不需要引入新的局部变量(
s
),因此代码可以按如下方式编写

switch(st)
{
     case var _ when st.Contains("asd") && st.Contains("efg"):
         Console.WriteLine(st);
         break;
     case var _ when st.Contains("xyz"):
         break;
     // etc.
}

你可以在上阅读。

顺便说一下,
textBox1.Text
已经是一个字符串了。不要费心在上面调用
Convert.ToString()
。没有必要。Psst,@ed,你可以用c#7中的模式匹配来完成。我一定很困惑——我不知道模式匹配如何允许OP所寻找的。Sajad,你得到的是相当干净、可读的代码。“我看不出有什么必要改变它。”威尔:哦,废话。我刚看到
。我认为模式匹配纯粹是他们添加到
开关中的整个类型检查。这几个月过去了,我都不知道你还能加什么!顺便说一下,
textBox1.Text
已经是一个字符串。不要费心在上面调用
Convert.ToString()
。没有必要。Psst,@ed,你可以用c#7中的模式匹配来完成。我一定很困惑——我不知道模式匹配如何允许OP所寻找的。Sajad,你得到的是相当干净、可读的代码。“我看不出有什么必要改变它。”威尔:哦,废话。我刚看到
。我认为模式匹配纯粹是他们添加到
开关中的整个类型检查。这几个月过去了,我都不知道你还能加什么+1因为哇,很酷——但我认为这不是一个支持C中模式匹配的更好的论点,而Duff的设备支持C中的case fall-through。你可以通过使用
var
来避免创建新变量,名为
\uu
的变量总是一个很好的混淆接收器。/辛普森爷爷就是这么棒,做OP想要做的事。我仍然更喜欢
if
语句。事实上,当添加了很多“when”子句来切换时,它很快就会比“if-else”链接看起来更糟糕。我会在一秒钟内用“35;”语法更新答案(似乎它与这个特定的问题相关)+1,因为哇,很酷——但我认为这不是一个支持C模式匹配的更好的论点,而Duff的设备支持C中的case fall-through。你可以通过使用
var
来避免创建新变量,名为
\uu
的变量总是一个很好的混淆接收器。/辛普森爷爷就是这么棒,做OP想要做的事。我仍然更喜欢
if
语句。事实上,当添加了很多“when”子句来切换时,它很快就会比“if-else”链接看起来更糟糕。我将在一秒钟内用“u”语法更新答案(它似乎与这个特定问题相关)