我可以用一种可以在CompareTo方法中使用的方式比较两个任意引用吗?

本文关键字:方式 两个 比较 引用 任意 方法 一种 我可以 CompareTo | 更新日期: 2023-09-27 17:53:30

我正在为一个结构体编写IComparable<T>.CompareTo(T)的实现。我正在做一个成员明智的比较(即d = a.CompareTo(other.a); if (d != 0) { return d; }等),但其中一个成员是一个类(让我们称之为Y),不实现IComparable或有任何其他合理的比较方式,所以我只是想比较引用(在这种情况下,我知道Y的所有实例都是唯一的)。是否有一种方法可以产生适合在比较方法中使用的int ?

我可以用一种可以在CompareTo方法中使用的方式比较两个任意引用吗?

比较查找顺序关系的引用是没有意义的。只有寻找相等才有意义。

您的声明

没有实现IComparable或have其他合理的比较

的方法

似乎与查找

相反。

一种将产生一个的方法适合在a中使用的整型比较法

如果不能合理地比较对象的排序,最好将它们完全排除在比较逻辑之外。

比较Object.GetHashCode()的结果对于我的目的来说足够好了(我只关心引用相等性,不管在哪里排序不相等。我希望T的实例具有Y作为成员的相同实例,在排序结果中彼此相邻)。我的T.CompareTo()使用以下帮助器:

    static int Compare(object a, object b)
    {
        if (a == null)
        {
            return b == null ? 0 : 1;
        }
        if (b == null)
        {
            return -1;
        }
        return a.GetHashCode().CompareTo(b.GetHashCode());
    }