假设我有一个这样的匿名对象列表
list = [{name: "bob"},{name: "sarah"},{name: "Bob"}]
然后当我列出list.Distinct()时,我会得到[{name: "bob"},{name: "sarah"},{name: "Bob"}]
有没有办法告诉它忽略字符串类型成员的大小写,而只是让bob或Bob返回 duplicate 项目,所以结果是[{name: "bob"},{name: "sarah"}]
最好的办法是在GroupBy
上使用.name.ToLower()
来解决它-但这远非理想。
答案 0 :(得分:0)
Distinct
使用类型定义的比较来检测同一对象。这意味着它应该检查它们是否是相同的引用,因为它们是对象。
可以在https://dotnetfiddle.net/h5AoUZ
中进行检查对于您而言,.NET无法知道您认为bob
和Bob
相同的条件。
一个命题给你。一种新的具有函数参数的Distinct方法:
public static IEnumerable<TSource> DistinctBy<TSource, TKey>
(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector)
{
HashSet<TKey> seenKeys = new HashSet<TKey>();
foreach (TSource element in source)
{
if (seenKeys.Add(keySelector(element)))
{
yield return element;
}
}
}
然后打电话
list.DistinctBy(x=>x.name.Lower())