小编Jav*_*iML的帖子

Sort()和CompareTo()方法的内部工作

我一直试图弄清楚该CompareTo()方法如何在内部工作,但我失败了.我搜索了这个网站并阅读了一些帖子,我想我已经看到了MSDN中有关这个主题的所有内容,我似乎并没有得到它.一个MSDN示例:

public int CompareTo(object obj)
{
    if (obj == null)
    {
        return 1;
    }

    Temperature otherTemperature = obj as Temperature;
    if (otherTemperature != null)
    {
        return this.temperatureC.CompareTo(otherTemperature.temperatureC);
    }
    else
    {
        throw new ArgumentException("the object is not a temperature");
    }
}
Run Code Online (Sandbox Code Playgroud)

这是该CompareTo()方法实现的MSDN示例.我理解这一点,我理解IComparable界面是如何工作的,如果我理解正确,当我使用该ArrayList.Sort()方法时会调用它.

我不明白的是:程序何时传递CompareTo(object obj)方法的参数?或者换句话说,该Sort()方法如何工作?我的意思是,这段代码将温度的实例与另一个温度实例进行比较,但是程序何时或如何获得第二个温度实例进行比较?我希望我的问题有道理.

我已经尝试在屏幕上打印CompareTo()过程,所以也许我可以对输出进行逆向工程,但我更加困惑自己.

编辑:也许如果我一步一步走,我可以更好地解释自己.假设我有3个温度对象:34,45,21 ArrayList.当我打电话时ArrayList.Sort(),这个CompareTo()方法叫做34.CompareTo(45)?然后45.CompareTo(21)呢?返回的整数在第一次比较中为1,在第二次比较中为-1?如果我只CompareTo()在obj(参数)为null 时才定义返回1 的方法,那么这些整数是如何返回的呢?我没有定义任何返回-1或0的东西.就好像我正在实现一个已经实现的方法.定义一个CompareTo()已经定义为返回-1,0和1的方法.

c# sorting icomparable compareto

3
推荐指数
1
解决办法
3882
查看次数

标签 统计

c# ×1

compareto ×1

icomparable ×1

sorting ×1