【发布时间】:2015-04-06 11:11:14
【问题描述】:
我有以下课程
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()
-
这段代码对我有用。您能否提供 2 个有问题的值并指出您想要保留的值?
-
modinfo[0]: id=2069, MD5 =0AAEBF5D2937BDF78CB65807C0DC047C modinfo[1]: id=2208, MD5 = 0AAEBF5D2937BDF78CB65807C0DC047C 我不在乎选择了哪些对象,如果 md5 值相同,那么对象的其余部分也是
-
仍然对我有用。它保留 id = 2069 的那个。
-
@RasmusHansen - 检查你的数据库字符串是否被修剪。我想这就是问题所在。