【问题标题】:how to use switch case like (if)?如何使用开关盒(如果)?
【发布时间】:2017-10-26 19:25:51
【问题描述】:

我想在我的代码中使用类似 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;

}

【问题讨论】:

  • 顺便说一句,textBox1.Text 已经是一个字符串了。不要费心打电话给Convert.ToString()。没必要。
  • 嘘,@ed,你可以用c# 7中的模式匹配来做到这一点docs.microsoft.com/en-us/dotnet/csharp/whats-new/…
  • 我一定很困惑——我不知道模式匹配如何允许 OP 正在寻找的东西。
  • Sajad,你得到的是相当干净、可读的代码。我认为没有必要更改它。
  • @Will 哦,废话。我刚看到when。我认为模式匹配纯粹是他们添加到switch 的整个类型检查。甚至不知道你可以在这些个月后添加 when 表达式!

标签: c# if-statement switch-statement case


【解决方案1】:

如果你可以使用更高版本的 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.
}

您可以在MSDN 上阅读。

【讨论】:

  • 您可以使用var _避免创建新变量
  • 是的,名为 _ 的变量总是一个很好的混淆接收器。</grandpa simpson>
  • 这太棒了,并且可以满足 OP 的要求。我还是更喜欢if 语句 xD
  • 实际上,当添加大量“when”子句来快速切换时,它看起来甚至比“if-else”链接还要糟糕。我将在一秒钟内用“_”语法更新答案(它似乎与这个特定问题有关)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多