与 C# 的多个字符串比较

本文关键字:字符串 比较 | 更新日期: 2023-09-27 17:56:36

假设我需要比较字符串x是"A","B"还是"C"。

使用Python,我可以在运算符中使用轻松检查这一点。

if x in ["A","B","C"]:
    do something

使用 C#,我可以做到

if (String.Compare(x, "A", StringComparison.OrdinalIgnoreCase) || ...)
    do something

它可以更类似于Python吗?

添加

我需要添加System.Linq才能使用不区分大小写的 Contain()。

using System;
using System.Linq;
using System.Collections.Generic;
class Hello {
    public static void Main() {
        var x = "A";
        var strings = new List<string> {"a", "B", "C"};
        if (strings.Contains(x, StringComparer.OrdinalIgnoreCase)) {
            Console.WriteLine("hello");
        }
    }
}

using System;
using System.Linq;
using System.Collections.Generic;
static class Hello {
    public static bool In(this string source, params string[] list)
    {
        if (null == source) throw new ArgumentNullException("source");
        return list.Contains(source, StringComparer.OrdinalIgnoreCase);
    }
    public static void Main() {
        string x = "A";
        if (x.In("a", "B", "C")) {
            Console.WriteLine("hello");
        }
    }
}

与 C# 的多个字符串比较

使用 Enumerable.Contains<T> 它是 IEnumerable<T> 上的扩展方法:

var strings = new List<string> { "A", "B", "C" };
string x = // some string
bool contains = strings.Contains(x, StringComparer.OrdinalIgnoreCase);
if(contains) {
    // do something
}
if ((new[]{"A","B","C"}).Contains(x, StringComparer.OrdinalIgnoreCase))

为什么是,StackOverflow上有一个经典的线程,它有一个扩展方法,可以完全完成您正在寻找的内容。

扩展方法的用途

public static bool In<T>(this T source, params T[] list)
{
  if(null==source) throw new ArgumentNullException("source");
  return list.Contains(source);
}

编辑以回应以下评论:如果您只关心字符串,那么:

public static bool In(this string source, params string[] list)
{
    if (null == source) throw new ArgumentNullException("source");
    return list.Contains(source, StringComparer.OrdinalIgnoreCase);
}

这导致了您熟悉的语法:

if(x.In("A","B","C"))
{
  // do something....
}

请注意,这与其他人仅以最接近您提到的语法发布的语法几乎完全相同。

List<string> possibleMatches = new List<string>{"A", "B", "C"};
if (possibleMatches.Contains(inputString))
{
  // do something
}

当然

var lst = new List<string>() { "A", "B", "C" };
if (lst.Contains(x, StringComparer.OrdinalIgnoreCase) {
   // do something
}

现在 C# 9.0 具有模式匹配功能,有一种新的优雅方法可以做到这一点:

if (x is "A" or "B" or "C") { ... }

或者,如果您需要不区分大小写:

if (x.ToUpperInvariant() is "A" or "B" or "C") { ... }

可能最好的选择是 Select Case(C# 中的开关)语句。

编辑:对不起,选择大小写是 VB.NET(我的常用语言),它是C#中的开关。

有几种方法可以做到这一点,我建议您执行以下操作:

 private const string _searched = "A|B|C|";
 private void button1_Click(object sender, EventArgs e)
 {
     string search = "B" + "|";
     if (_searched.IndexOf(search) > -1)
     {
         //do something
     }
 }

还有很多其他方法可以解决这个问题,你的搜索字段越大,使用数组、哈希表或集合的可能性就越大。只要你的可能性范围仍然很小,使用一个简单的字符串将是你最好的表现。更复杂的数组或对象(或对象数组...)的所有开销都是不必要的。