您還沒有顯示標識符和EqualityComparer的聲明。但我認爲你需要行更改爲類似:
return EqualityComparer<IIdentifiableEntry>.Default.Equals<IType>(first.Entry.Id, second.Entry.Id);
[編輯]
按Jon的評論。你根本不想要相等比較器。 Asumming這是Entry.Id是IComparable的,然後只是:
return first.Entry.Id.CompareTo(second.Entry.Id);
我會建議進入僅限於IComparable的,所以我們得到的東西,如:
類PriorityQueueEntry> 其中TPriorityValue:IComparable的 其中TEntry :IComparable的 { 公共TPriorityValue優先{獲取;私人集;} 公共TEntry項{獲取;私人集;}
public PriorityQueueEntry(TPriorityValue val, TIdentifiableEntry entry)
{
Priority = val;
Entry = entry;
}
public int Compare(PriorityQueueEntry<TPriorityValue, TEntry first, PriorityQueueEntry<TPriorityValue, TEntry> second)
{
if (first.Priority.CompareTo(second.Priority) < 0)
{
return -1;
}
else if (first.Priority.CompareTo(second.Priority) > 0)
{
return 1;
}
return first.Enrtry.CompareTo(second.Entry);
}
}
如果TEntry是一個類,您可能需要添加一些空檢查。
此代碼不能編譯,因爲Equals返回一個布爾和方法應該返回一個int –
@WouterdeKort:伊克。謝謝,會編輯。 –
其實IType:IConvertible解決了我的問題。對不完整的問題抱歉。 – Heisenbug