linq 包含字符串比较。 IE质量比较器
linq contains string comparison. IEqualityComparer
我想知道确定字符串是否在字符串列表中,符合 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);
?
或者使用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 不支持这两种方式。
您有多种选择。
第一种是使用 Enumerable.Any
,并使用 string.Equals
重载测试每个元素,该重载采用 StringComparison
:
bool isInList = _myList.Any(x => string.Equals(x, "A", StringComparison.InvariantCultureIgnoreCase));
(尽可能使用静态 string.Equals(string, string)
更安全,因为任何一个参数都是 null
都是安全的)。
Linq 还提供了 Contains
which takes an IEqualityComparer<T>
, which you can pass StringComparer.InvariantCultureIgnoreCase
的重载到:
bool isInList = _myList.Contains("A", StringComparer.InvariantCultureIgnoreCase);
我想知道确定字符串是否在字符串列表中,符合 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);
?
或者使用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 不支持这两种方式。
您有多种选择。
第一种是使用 Enumerable.Any
,并使用 string.Equals
重载测试每个元素,该重载采用 StringComparison
:
bool isInList = _myList.Any(x => string.Equals(x, "A", StringComparison.InvariantCultureIgnoreCase));
(尽可能使用静态 string.Equals(string, string)
更安全,因为任何一个参数都是 null
都是安全的)。
Linq 还提供了 Contains
which takes an IEqualityComparer<T>
, which you can pass StringComparer.InvariantCultureIgnoreCase
的重载到:
bool isInList = _myList.Contains("A", StringComparer.InvariantCultureIgnoreCase);