В компилируется , поскольку для T
нет ограничений, которые он должен реализовать IComparable<T>
.
Я думаю, что документация немного сбивает с толку, потому что элементы массива на самом деле не должны реализовывать IComparable<T>
для того же T
, что и вызов. Например, это прекрасно работает:
using System;
class Test
{
static void Main()
{
object[] objects = { "d", "b", "c", "a" };
Array.Sort<object>(objects);
}
}
Я думаю, что более разумно просто сказать, что элементы должны быть сопоставимы друг с другом «как-то». Например, это нормально, хотя ничто не реализует универсальный IComparable
интерфейс:
using System;
class A : IComparable
{
private readonly int value;
public A(int value)
{
this.value = value;
}
public int CompareTo(object other)
{
// Just cast for now...
return value.CompareTo(((A)other).value);
}
}
class Test
{
static void Main()
{
object[] objects = { new A(5), new A(3), new A(4) };
Array.Sort<object>(objects);
}
}