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);,但只是"做正确的事情".或者有没有更好的方法来做到这一点,而不是触及每个类,使他们两个 IComparable和IComparable<T>?
您既可以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)
(请注意,这可以与您现有的方法一起使用.)