我有下面的类LINQ的不同不调用equals方法
public class ModInfo : IEquatable<ModInfo>
{
public int ID { get; set; }
public string MD5 { get; set; }
public bool Equals(ModInfo other)
{
return other.MD5.Equals(MD5);
}
public override int GetHashCode()
{
return MD5.GetHashCode();
}
}
我使用像这样的方法中的一些的数据加载到该类别的列表:
public void ReloadEverything() {
var beforeSort = new List<ModInfo>();
// Bunch of loading from local sqlite database.
// not included since it's reload boring to look at
var modinfo = beforeSort.OrderBy(m => m.ID).AsEnumerable().Distinct().ToList();
}
问题是Distinct()
电话似乎并没有做它的工作。仍然存在彼此相等的物体。
根据这篇文章:https://msdn.microsoft.com/en-us/library/vstudio/bb348436%28v=vs.100%29.aspx 这就是你应该如何做出不同的工作,但它似乎并没有调用ModInfo对象上的Equals方法。 什么可能导致这种情况发生?
值的示例:
modinfo[0]: id=2069, MD5 =0AAEBF5D2937BDF78CB65807C0DC047C
modinfo[1]: id=2208, MD5 = 0AAEBF5D2937BDF78CB65807C0DC047C
我不在乎哪个值被选择,他们很可能是相同的,因为无论如何的MD5值是一样的。
尝试返回0而不是返回MD5.GetHashCode();在GetHashCode() – bit 2015-04-06 11:13:28
这段代码适用于我。你能否提供2个有问题的价值观并指出你想要保留的价值? – 2015-04-06 11:18:03
modinfo命令[0]:= ID 2069,MD5 = 0AAEBF5D2937BDF78CB65807C0DC047C modinfo命令[1]:= ID 2208,MD5 = 0AAEBF5D2937BDF78CB65807C0DC047C 我不关心的对象得到选定,如果MD5值是相同的,则的其余部分对象也是 – 2015-04-06 11:22:14