我一直试图弄清楚该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的方法.