0

BinarySearch メソッドの動作を文書化したMSDN ページは、検索される配列と値の両方が IComparable を実装している可能性があることを示しています。

1) ページの説明

のいずれかvalueまたはすべての要素が 、比較に使用されるインターフェイスをarray実装する必要があります。IComparable

2) さらに、メソッドはInvalidOperationExceptionifをスローします

valueインターフェイスを実装していないためIComparable、検索でインターフェイスを実装していない要素が検出されましたIComparable

この動作を (値の IComparable インターフェイスを使用して) 実証しようとしましたが、できませんでした。これが私のコードです:

// Declarations
class Many 
{
    public string data { get; set; }
}
class One : Many, IComparable<Many>
{
    public int CompareTo(Many other)
    {
        Console.WriteLine("Comparator of One invoked");
        if (this.data.Length < other.data.Length) return -1;
        if (this.data.Length > other.data.Length) return 1;
        return 0;
    }
}
...
// action
    Many[] manies = new[] { new Many { data = "1" }, 
                            new Many { data = "22" },  
                            new Many { data = "333" }, 
                            new Many { data = "4444" }, };
    One one = new One {data="333"};
    Console.WriteLine(Array.BinarySearch(manies, one));

これを実行すると、が実装されていないSystem.InvalidOperationException場合に発生するはずの が得られます。しかし、それは実装しているように私には思えます。valueIComparableIComparable

配列内の要素の代わりに、値のコンパレーターを実行するにはどうすればよいですか?

4

1 に答える 1