>>661のためにデバッグで落ちるデータの特定してたんだが、
なかなか大変だった。
めったにおこらないレアケースらしい。
逆にいえば、ほとんどの場合、望んでいる振る舞いをする。

以下が落ちるコード。みんなも確認してみてほしい。

public class DescendingRandomComparer : IComparer<int>
{
public int Compare(int x, int y)
{
return x == y ? Program.random.Next(2) * 2 - 1 : -x.CompareTo(y);
}
}

class Program
{
public static Random random = new Random(1);

static void Main(string[] args)
{
int[] key = { -9, -11, -10, -10, -10, -10, -11, -10, -10, -9, -11, -11, -9, -11, -14, -13, -10, -11, -13 };
int[] val = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18 };

DescendingRandomComparer descendingRandomComparer = new DescendingRandomComparer();
Array.Sort(key, val, descendingRandomComparer);
Console.WriteLine(key.ToStringExtension());
Console.WriteLine(val.ToStringExtension());

Console.ReadLine();
}
}