不变量搜索数组/字符串列表中的字符串

时间:2013-06-11 07:50:40

标签: c# linq

以下代码可用于使用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
}

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

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

祝你好运, Offler

2 个答案:

答案 0 :(得分:2)

而不是Contains使用IndexOfStringComparison.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
}

Demo

答案 1 :(得分:1)

您是否可以使用IndexOf使用相应的StringComparison值进行简单检查?例如:

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