这可能是一个微不足道的问题,但我没有找到任何关于这方面的信息:让类型T实现IComparable<S> (T和S是两个不同的类型)是“有害的”还是被认为是糟糕的实践?
示例:
class Foo : IComparable<int>
{
public int CompareTo(int other)
{
if (other < i) return -1;
if (other > i) return 1;
return 0;
}
private int i;
}应该避免这种代码吗?如果应该,为什么?
发布于 2010-03-30 00:25:01
我至少会认为这是“奇怪的”--特别是在这一点上,比较不会是对称的,这通常是正常比较合约的一部分。
如果有一个特定的情况,它比你想要做的任何其他实现都简单,那是可以的-但我不能说我曾经遇到过这样的情况。类似这样的比较几乎总是用于对同构集合或类似的集合进行排序。
你脑海中有没有一个特殊的情况,或者这只是一个“为了兴趣”的问题?
发布于 2010-03-30 00:25:56
实现这样的东西是很奇特的。但这并不是一个好的做法。
想象一下你看到的代码是这样的:
Foo x = new Foo();
if( x.compareTo(15) > 0)
{
//blah blah
}你会说“天哪!怎么把15和x进行比较?”这会降低代码的可读性。
最好像这样添加compare as函数: public int IsMoreThanPrivateI(int );
https://stackoverflow.com/questions/2539500
复制相似问题