我想知道一个确定的字符串是否在字符串列表中,符合 StringComparison.InvariantCultureIgnoreCase
条件。所以我尝试了类似的东西:
bool isInList = _myList.Contains(toFindString, StringComparison.InvariantCultureIgnoreCase);
或者:
bool isInList = _myList.Contains(listElement => listElement .Equals(toFindString,StringComparison.InvariantCultureIgnoreCase));
但是,Contains
方法不包含 Func<TSource, bool> predicate
重载,我认为在这种情况下这是最干净的。例如,Where
或 Count
方法得到了它。
Count
的重载方法签名:
public static int Count<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate);
我的案例的具体应用:
int foundCount = _myList.Count(listElement => listElement.Equals(toFindString, StringComparison.InvariantCultureIgnoreCase));
将 StringComparison.InvariantCultureIgnoreCase
条件添加到 linq Contains
当前重载的 IEqualityComparer
就是这个 public static bool Contains<TSource>(this IEnumerable<TSource> source, TSource value, IEqualityComparer<TSource> comparer);
的最简洁方法是什么?
答案 0 :(得分:1)
要么使用StringComparer.InvariantCultureIgnoreCase
bool isInList = _myList.Contains(toFindString, StringComparer.InvariantCultureIgnoreCase);
或将 Any
与 StringComparison
一起使用:
bool isInList = _myList.Any(s => s.Equals(toFindString,StringComparison.InvariantCultureIgnoreCase));
如果列表中有 null
字符串,后者有问题,因此您可以使用 string.Equals
。
请注意,Linq-To-Entities 不支持这两种方式。
答案 1 :(得分:1)
您有多种选择。
第一个是使用 Enumerable.Any
,并使用 string.Equals
重载测试每个元素,该重载带有 StringComparison
:
bool isInList = _myList.Any(x => string.Equals(x, "A", StringComparison.InvariantCultureIgnoreCase));
(在可能的情况下使用静态 string.Equals(string, string)
更安全,因为 null
的任一参数都是安全的)。
Linq 还提供了 Contains
的重载,它采用 IEqualityComparer<T>
,您可以将 StringComparer.InvariantCultureIgnoreCase
传递给:
bool isInList = _myList.Contains("A", StringComparer.InvariantCultureIgnoreCase);