0

Comparer クラスの Compare 関数のドキュメントには、次のように書かれています。

a が IComparable を実装している場合、a. CompareTo (b) が返されます。それ以外の場合、b が IComparable を実装している場合は、b の否定された結果。CompareTo (a) が返されます。

しかし、私がそれをテストすると、最初の入力が Icomparable を実装することを要求するように見えます。次のコードではエラーが発生します。

class Program
{
    static void Main(string[] args)
    {
        Test t1 = new Test();
        Test2 t2 = new Test2();

        int i = Comparer.Default.Compare(t1,t2);

    }
}

class Test
{
}

class Test2 : IComparable
{
    public int CompareTo(object obj)
    {
        return 0;
    }
}

それは私だけですか、それともドキュメントが間違っていますか?

4

1 に答える 1

2

Reector は、a が IComparable を実装しているかどうかのみをチェックすると述べています。

public int Compare(object a, object b)
{
if (a == b)
{
    return 0;
}
if (a == null)
{
    return -1;
}
if (b == null)
{
    return 1;
}
if (this.m_compareInfo != null)
{
    string str = a as string;
    string str2 = b as string;
    if ((str != null) && (str2 != null))
    {
        return this.m_compareInfo.Compare(str, str2);
    }
}
IComparable comparable = a as IComparable;
if (comparable == null)
{
    throw new ArgumentException(Environment.GetResourceString("Argument_ImplementIComparable"));
}
return comparable.CompareTo(b);

}

于 2009-10-19T12:57:36.440 に答える