我有下面的類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