如何混合/修复IComparable和IComparable <T>混乱

Mig*_*MoS 0 c# generics icomparable

我有一个辅助函数,它基本上在两个对象上调用CompareTo,但是会进行一些特殊的角点检查,转换等.

本来我写这个函数是这样的:

public static bool BetterCompare(IComparable lhs, IComparable rhs, out retCode)
{
    ...
    retCode = lhs.CompareTo(rhs);
    ...
}
Run Code Online (Sandbox Code Playgroud)

但问题是,如果我有一个class AwesomeClass : IComparable<AwesomeClass>.事实上,我有几个老IComparable课程已经消失了IComparable<T>.然而编译器生气,因为它无法将这些新对象转换为IComparable.我不知道这是否会使情况变得更糟,但其中一些是abstract(虽然抽象类确实提供了实现).

我怎么能传达"我想要两个我可以称之为CompareTo的对象",而不是让编译器给我任何嘴唇.优选地,新功能看起来不应该BetterCompare<AwesomeClass>(this, that, out retCode);,但只是"做正确的事情".或者有没有更好的方法来做到这一点,而不是触及每个类,使他们两个 IComparableIComparable<T>

Jon*_*eet 9

您既可以AwesomeClass实现非通用IComparable接口,也IComparable<T>可以编写通用BetterCompare方法:

public static bool BetterCompare<T>(T lhs, T rhs, out retCode)
    where T : IComparable<T>
{
    ...
    retCode = lhs.CompareTo(rhs);
    ...
}
Run Code Online (Sandbox Code Playgroud)

(请注意,这可以与您现有的方法一起使用.)