C# IEnumerable对象中的不同项

C# IEnumerable对象中的不同项,c#,C#,我正在使用C#,并且有一个IEnumerable对象。注意(IEnumerable而不是IEnumerable) 如何在该对象中找到不同的项 使用,然后 var-distincitems=items.Cast().Distinct(); 使用,然后 var-distincitems=items.Cast().Distinct(); 这是对对象使用Equals方法,还是仅仅通过ref进行比较?它对这些对象使用默认的比较器,在Distinct上有一个覆盖以提供您自己的IEqualityCompare

我正在使用C#,并且有一个
IEnumerable
对象。注意(
IEnumerable
而不是
IEnumerable

如何在该对象中找到不同的项

使用,然后

var-distincitems=items.Cast().Distinct();
使用,然后

var-distincitems=items.Cast().Distinct();

这是对对象使用
Equals
方法,还是仅仅通过ref进行比较?它对这些对象使用默认的比较器,在Distinct上有一个覆盖以提供您自己的
IEqualityComparer
@p.s.w.g:
GetHashCode
不用于确定集合中的两个对象是否相等(因此不不同)。两个不相等的对象可以具有相同的哈希代码。Eluvatar的注释是正确的。@p.s.w.g详细说明:要查找对象是否重复,该方法首先查找已遇到的具有相同哈希代码的对象。然后检查每个对象的实际相等性。如果GetHashCode为两个对象返回不同的值,则第一步将失败,并且该项是重复项的事实将丢失。(对该算法的描述稍微简化了一点——它确实会搜索与某个素数模相等的哈希代码,但其原理是:哈希代码用于消除大多数对象,从而将调用次数减少到相等。)@phoog模的东西就是我在评论中的括号中写“高概率”的原因。这两个实例必须给出与哈希表当前使用的素数相等的哈希代码。由于我们不知道它当前使用的模数(桶数),我们最好给出完全相同的哈希(modulo
Int32
)。这是对对象使用
Equals
方法,还是只按ref进行比较?它对这些对象使用默认的比较器,Distinct上有一个覆盖以提供您自己的
IEqualityComparer
@p.s.w.g:
GetHashCode
不用于确定集合中的两个对象是否相等(因此不不同)。两个不相等的对象可以具有相同的哈希代码。Eluvatar的注释是正确的。@p.s.w.g详细说明:要查找对象是否重复,该方法首先查找已遇到的具有相同哈希代码的对象。然后检查每个对象的实际相等性。如果GetHashCode为两个对象返回不同的值,则第一步将失败,并且该项是重复项的事实将丢失。(对该算法的描述稍微简化了一点——它确实会搜索与某个素数模相等的哈希代码,但其原理是:哈希代码用于消除大多数对象,从而将调用次数减少到相等。)@phoog模的东西就是我在评论中的括号中写“高概率”的原因。这两个实例必须给出与哈希表当前使用的素数相等的哈希代码。因为我们不知道它当前使用的是什么模数(桶数),所以我们最好给出完全相同的哈希(modulo
Int32
)。
var distinctItems = items.Cast<object>().Distinct();