c#项目中什么情况下Linq的无法调用平等的

  介绍

本篇文章为大家展示了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的无法调用平等的