【问题标题】:How to use .Contains() in a switch statement in C#? [closed]如何在 C# 的 switch 语句中使用 .Contains()? [关闭]
【发布时间】:2021-06-07 15:07:10
【问题描述】:

我想在 C# 的 switch 语句中使用 Contains(),但我不知道如何。如果你不明白我的意思,我会给你看代码,所以我猜你可能会明白。

我想工作的代码:

public void Read(string text)
{
    switch (text.ToLower().Contains())
    {
        case "read":
            MessageBox.Show(text);
            break;
        case "not":
            MessageBox.Show(text);
            break;
    }
}

上面的代码是我尝试过的,但它不起作用。那么如何在 switch 语句中使用函数。我可以使用else ifs,但我想在 switch 语句中使用它。

【问题讨论】:

  • 使用if ... else if
  • @Axyclez 您似乎对这些建议不满意。也许您可以详细说明为什么要使用switch 语句而不是if {} else if {}?
  • @Axyclez switch 和 if 之间的任何性能差异都可以忽略不计,不值得考虑。
  • @Axyclez 我不认为人们说你的代码很乱,因为你没有使用 switch 语句。您可能希望他们详细说明这一点,以便您可以专注于编写更好的代码。
  • 这能回答你的问题吗? Use string.Contains() with switch()

标签: c#


【解决方案1】:

正如我所见,cases 都相等:文本包含 "read" 或 "not" 我们应该这样做:显示 "text"

我建议摆脱switch 并拥有一个if:

using System.Linq; // to query with any

...

public void Read(string text) {
  // public method arguments validation
  if (null == text)
    throw new ArgumentNullException(nameof(text));

  string[] words = new string[] {"read", "not"};

  // ToLower() is a bad practice: 
  // - it may occure that we don't have to process the entire text
  // - StringComparison.OrdinalIgnoreCase is more readable
  // - words doesn't have to lowercase words only   
  if (words.Any(word => text.Contains(word, StringComparison.OrdinalIgnoreCase)))
    MessageBox.Show(text);
} 

【讨论】:

    【解决方案2】:
    public void Read(string text)
    {
      switch (text)
      {
        case string a when test.ToLower().Contains("read"):
          MessageBox.Show(text);
          break;
        case string b when test.ToLower().Contains("not"):
          MessageBox.Show(text);
          break;
      }
    }
    

    此外,这里的答案是关于如何将 string.Contains() 方法与 switch 语句一起使用。 Use string.Contains() with switch()

    【讨论】:

      【解决方案3】:

      Contains() 函数不能像这样在 switch 语句中使用,因为它会返回 true 或 false 而 switch 语句适用于返回随机情况的变量,例如 1,2,3 ,对于您的问题,最好是改用'if else'。

      【讨论】:

        【解决方案4】:

        虽然如果只有 2 种情况,那么你应该总是使用 if ,但如果你想使用 switch ,你可以使用模式匹配。我认为你可能需要 C# 7.0

               public static void Read(string text)
            {
                switch (text)
                {
                    case var read when text.ToLower().Contains("read"):
                        MessageBox.Show(text);
                        break;
                    case var nott when text.ToLower().Contains("not"):
                        MessageBox.Show(text);
                        break;
                }
            }
        

        并不是说我的解决方案是完美的。我说是的,可以使用 switch

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-09-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-11-25
          • 1970-01-01
          • 2019-06-12
          相关资源
          最近更新 更多