【发布时间】:2021-05-25 12:53:12
【问题描述】:
我想知道确定字符串是否在字符串列表中,具有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); 的最干净的方法是什么?
【问题讨论】:
-
_myList.Any(x => string.Equals(x, toFindString, StringComparison.InvariantCultureIgnoreCase)? -
呜呜这有点道理,在
Any中,重载可用... -
还有
Enumerable.Contains确实需要IEqualityComparer,应该可以正常工作 -
但是有了
IEqualityComparer,你必须创建一个实现接口的类并将其传入,不是吗?
标签: c# linq string-comparison