我一直试图弄清楚该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");
}
}
这是该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的方法时定义它。