您还没有显示标识符和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