我在书上看到ArrayList 中的对象如果继承了IComparable,那么Sort()方法会用IComparable的CompareTo方法进行排序,经我实际测试确实是这样,但是我在用.Net Reflector 查看ArrayList.Sort()方法为:
public virtual void Sort()
{
    this.Sort(0, this.Count, Comparer.Default);
}
这里并没有调用CompareTo 的方法啊,请问谁能给解释一下?

解决方案 »

  1.   

    因为这是Reflector  的反编译规则啊  有些if else 嵌套ide代码都反编译成 Goto  了
      

  2.   


    这里没有调用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 有什么关系?
      

  3.   

    Array.Sort(this._items, index, count, comparer);
      

  4.   

    在Comparer.Default的Compare方法
      

  5.   

    调用 Array.Sort(this._items, index, count, comparer);
    最后一个参数 comparer就是了