一尘不染

LINQ选择与匿名类型不同

c#

所以我有一个对象集合。确切的类型并不重要。因此,我要从中提取一对特定属性的所有唯一对,从而:

myObjectCollection.Select(item=>new
                                {
                                     Alpha = item.propOne,
                                     Bravo = item.propTwo
                                }
                 ).Distinct();

所以我的问题是:在这种情况下,Disdistct是否会使用默认的对象等于(对我来说将是无用的,因为每个对象都是新的)还是可以被告知执行不同的等于(在这种情况下,Alpha和Bravo的值等于=>相等的实例)?如果不这样做,是否有任何方法可以达到该结果?


阅读 215

收藏
2020-05-19

共1个答案

一尘不染

在这里阅读K.Scott Allen的精彩文章:

和所有人平等…匿名类型

简短的答案(我引用):

事实证明,C#编译器针对匿名类型覆盖了Equals和GetHashCode。这两个重写方法的实现使用类型上的所有公共属性来计算对象的哈希码并测试是否相等。如果相同匿名类型的两个对象的属性都具有相同的值,则这些对象相等。

因此,在返回匿名类型的查询上使用Distinct()方法是完全安全的。

2020-05-19