我在书上看到ArrayList 中的对象如果继承了IComparable,那么Sort()方法会用IComparable的CompareTo方法进行排序,经我实际测试确实是这样,但是我在用.Net Reflector 查看ArrayList.Sort()方法为:
public virtual void Sort()
{
this.Sort(0, this.Count, Comparer.Default);
}
这里并没有调用CompareTo 的方法啊,请问谁能给解释一下?
public virtual void Sort()
{
this.Sort(0, this.Count, Comparer.Default);
}
这里并没有调用CompareTo 的方法啊,请问谁能给解释一下?
这里没有调用CompareTo 方法,而是调用了另一个方法
public virtual void Sort(int index, int count, IComparer comparer)
{
if ((index < 0) || (count < 0))
{
throw new ArgumentOutOfRangeException((index < 0) ? "index" : "count", Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
}
if ((this._size - index) < count)
{
throw new ArgumentException(Environment.GetResourceString("Argument_InvalidOffLen"));
}
Array.Sort(this._items, index, count, comparer);
this._version++;
}仍然没见CompareTo 请问这是怎么回事,另外这跟你说的编译规则 if else goto 有什么关系?
最后一个参数 comparer就是了