在字符串数组/列表中对字符串进行大小写不变搜索

本文关键字:字符串 大小写 搜索 数组 列表 | 更新日期: 2023-09-27 18:18:01

以下代码可用于使用 LINQ 在数组/字符串列表中搜索。

String[] someArray
    = { "Test1", "test2", "test3", "TEST4" };
string toCheck = "Test1";
if (someArray.Any(toCheck.Contains))
{
    // found -> Do sth.
}
// or with list 
List<string> someList
    = new List<string>(new string[] { "TEST1", "test2", "test3", "TEST4"  });
if (someList.Any(toCheck.Contains))
{
    // "Test1" != "TEST1"
}

但是你怎么能做到这种情况不变呢?

我的方法是将完整列表转换为上层列表,然后使用 contains 进行测试:

if ((someList.ConvertAll(item => item.ToUpper()).Any(toCheck.ToUpper().Contains)))
{
    // found -> Do sth.
}

在这种情况下,原始列表不会更改。

if ((someList.Select(item => item.ToUpper()).Any(toCheck.ToUpper().Contains)))
{
    // works with both
}

嗯,它有效...(还有一些语言特定的东西,比如土耳其语的"i"字母......(据我所知,我们仍然没有土耳其客户......但谁知道将来会有没有?((,但它似乎不是很优雅。

如果项目在列表中,有没有办法进行大小写不变比较?

此致敬意奥夫勒

在字符串数组/列表中对字符串进行大小写不变搜索

而不是ContainsIndexOfStringComparison.OrdinalIgnoreCase一起使用:

String[] strings = { "Test1", "test2", "test3", "TEST4" };
String text = "TEST123";
if (strings.Any(str => text.IndexOf(str, StringComparison.OrdinalIgnoreCase) > -1))
{
    // we will enter this if clause
}

演示

您不能只对使用适当的 StringCompare 值的 IndexOf 进行简单的检查吗? 例如:

if(someArray.Any(s => s.IndexOf(toCheck, StringComparison.CurrentCultureIgnoreCase) != -1)
{
    // do something
}