c# Linq distinct不会调用Equals方法详解
我有以下课程
我使用如下方法将一些数据加载到该类的列表中:
问题是distinct()调用似乎没有做到这一点.仍然存在彼此相等的对象.
根据这篇文章:
这就是你应该如何做出不同的工作,但它似乎并没有在modinfo对象上调用equals方法.
是什么导致这种情况发生?
示例值:
modinfo[0]: id=2069, md5 =0aaebf5d2937bdf78cb65807c0dc047c
modinfo[1]: id=2208, md5 = 0aaebf5d2937bdf78cb65807c0dc047c
我不关心选择哪个值,因为md5值相同,它们可能是相同的.
您还需要覆盖object.equals,而不仅仅是实现iequatable.
如果你把它添加到你的班级:
它应该工作.
有关详细信息,请参阅此文章:implementing iequatable properly
编辑:好的,这是基于gethashcode的最佳实践的略有不同的实现.
你可以验证它:
what's with those specific numbers in gethashcode?
补充知识:c#中通过distinct方法对list集合进行去重
在c#的list集合对象中,可以使用distinct方法来对list集合元素进行去重,如果list集合内部元素为值类型,则distinct方法根据值类型是否相等来判断去重,如果list集合内部元素为引用类型变量,则是判断相同引用的对象为相同进行list集合元素去重操作。
(1)值类型的list集合对象intlist,内部元素为1,1,2,2,3,4,5等这几个元素。对intlist对象进行去重可使用下列语句:
list intlist= new list() { 1, 1,2,2,3,4,5};
intlist= intlist.distinct().tolist();
经过上述distinct方法去重处理并重新赋值后,intlist集合内部元素为:1,2,3,4,5。
(2)针对引用类型的distinct方法去重,则是判断list集合中的对象引用地址是否一致,不一致的话为不同的两个对象,即使2个对象的每个属性值都一样的情况下。
上述程序语句中,虽然list集合testlist中的第2个元素和第3个元素的属性值完全一样,但这2个元素依旧是不同的对象,因此在调用distinct()方法去重后重新赋值,testlist依旧不变。
以上这篇c# linq distinct不会调用equals方法详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
上一篇: angular2模块和共享模块详解