我有一个辅助函数,它基本上在两个对象上调用 CompareTo,但会进行一些特殊的极端情况检查、转换等。
最初我是这样编写函数的:
public static bool BetterCompare(IComparable lhs, IComparable rhs, out retCode)
{
...
retCode = lhs.CompareTo(rhs);
...
}
但问题是,如果我有一个class AwesomeClass : IComparable<AwesomeClass>
. 事实上,我有几个,因为一些老IComparable
班已经走了IComparable<T>
。然而编译器很生气,因为它无法将这些新对象转换为IComparable
. 我不知道这是否会使情况变得更糟,但其中一些是abstract
(尽管抽象类确实提供了一个实现)。
如何传达“我想要两个可以调用 CompareTo 的对象”而不让编译器给我任何信息。最好,新功能不应该看起来像BetterCompare<AwesomeClass>(this, that, out retCode);
,而只是“做正确的事”。或者有没有更好的方法来做到这一点,而无需触及每个班级,让他们都 IComparable
和IComparable<T>
?