本篇文章为大家展示了c#项目中什么情况下Linq的无法调用等于,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
具体如下:
公共空ReloadEverything () { var beforeSort=new List();//堆加载本地sqlite数据库。//不包括自变# 39;s重载无聊的看 var modinfo=beforeSort。OrderBy (m=比;.ToList .Distinct m.ID) .AsEnumerable () () (); }
问题是不同的()调用似乎没有做到这一点。仍然存在彼此相等的对象。
根据这篇文章:https://msdn.microsoft.com/en-us/library/vstudio/bb348436%28v=vs.100%29.aspx
这就是你应该如何做出不同的工作,但它似乎并没有在ModInfo对象上调用=方法。
<强>是什么导致这种情况发生? 强>
示例值:
ModInfo [0]: id=2069, MD5=0 aaebf5d2937bdf78cb65807c0dc047c
ModInfo [1]: id=2208, MD5=0 aaebf5d2937bdf78cb65807c0dc047c
引用>我不关心选择哪个值,因为MD5值相同,它们可能是相同的。
您还需要覆盖Object.Equals,而不仅仅是实现IEquatable。
如果你把它添加到你的班级:
公共类ModInfo: IEquatable{ 公共int ID{得到;设置;} 公共字符串MD5{得到;设置;} 公共bool=(ModInfo其他) { 如果(其他==null)返回false; 返回(this.MD5.Equals (other.MD5)); } 公共覆盖int GetHashCode方法() { 无节制的 { int散列=13; 散列=(散列* 7)+ MD5.GetHashCode (); 返回哈希; } } 公共覆盖bool=(对象obj) { ModInfo其他=obj ModInfo; 如果(其他!=null) { 返回=(其他); } 其他的 { 返回错误; } } } 你可以验证它:
ModInfo mod1=new ModInfo {ID=1, MD5=? aaebf5d2937bdf78cb65807c0dc047c"}; ModInfo mod2=new ModInfo {ID=2, MD5=? aaebf5d2937bdf78cb65807c0dc047c"};//你应该得到真正的在这里 bool areEqual=mod1.Equals (mod2); List插件=new List {mod1, mod2};//你应该得到1的结果 插件=mods.Distinct () .ToList (); 你们# 39;年代与具体数字GetHashCode& # 63;
<强> c#中通过不同的方法对集列表合进行去重强>
在c#的列表集合对象中,可以使用不同的方法来对列表集合元素进行去重,如果集列表合内部元素为值类型,则不同的方法根据值类型是否相等来判断去重,如果集列表合内部元素为引用类型变量,则是判断相同引用的对象为相同进行集列表合元素去重操作。
(1)值类型的集列表合对象intList,内部元素为1,1,2,2,3,4,5等这几个元素。对intList对象进行去重可使用下列语句:
列表intList=new () {1, 1、2、2、3、4、5};
intList=intList.Distinct () .ToList ();
引用>经过上述不同的方法去重处理并重新赋值后,intList集合内部元素为:1,2,3,4,5 .
(2)针对引用类型的不同的方法去重,则是判断集列表合中的对象引用地址是否一致,不一致的话为不同的两个对象,即使2个对象的每个属性值都一样的情况下。
列表testList=new List(); testList。添加(新TestModel () { 指数=1, Name=" Index1 " }); testList。添加(新TestModel () { 指数=2, Name=" Index2 " }); testList。添加(新TestModel () { 指数=2, Name=" Index2 " }); testList=testList.Distinct () .ToList (); 上述程序语句中,虽然列表集合testList中的第2个元素和第3个元素的属性值完全一样,但这2个元素依旧是不同的对象,因此在调用不同的()方法去重后重新赋值,testList依旧不变。
c#项目中什么情况下Linq的无法调用平等的