首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实现IComparable<NotSelf>

实现IComparable<NotSelf>
EN

Stack Overflow用户
提问于 2010-03-30 00:18:27
回答 2查看 223关注 0票数 6

这可能是一个微不足道的问题,但我没有找到任何关于这方面的信息:让类型T实现IComparable<S> (T和S是两个不同的类型)是“有害的”还是被认为是糟糕的实践?

示例:

代码语言:javascript
复制
class Foo : IComparable<int>
{
    public int CompareTo(int other)
    {
        if (other < i) return -1;
        if (other > i) return 1;

        return 0;
    }

    private int i;
}

应该避免这种代码吗?如果应该,为什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-03-30 00:25:01

我至少会认为这是“奇怪的”--特别是在这一点上,比较不会是对称的,这通常是正常比较合约的一部分。

如果有一个特定的情况,它比你想要做的任何其他实现都简单,那是可以的-但我不能说我曾经遇到过这样的情况。类似这样的比较几乎总是用于对同构集合或类似的集合进行排序。

你脑海中有没有一个特殊的情况,或者这只是一个“为了兴趣”的问题?

票数 6
EN

Stack Overflow用户

发布于 2010-03-30 00:25:56

实现这样的东西是很奇特的。但这并不是一个好的做法。

想象一下你看到的代码是这样的:

代码语言:javascript
复制
Foo x = new Foo();

if( x.compareTo(15) > 0)
{
  //blah blah
}

你会说“天哪!怎么把15和x进行比较?”这会降低代码的可读性。

最好像这样添加compare as函数: public int IsMoreThanPrivateI(int );

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2539500

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档