的MSDN page記錄了BinarySearch的方法的行爲顯示調用IComparable的
1)頁描述
value
或array
的每個元素都必須實現IComparable
接口,該接口用於比較。
2)另外,該方法將引發InvalidOperationException
如果
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
,而如果value
沒有實現IComparable
根據文檔應該發生。但在我看來,它確實實施了IComparable
。
如何獲取要運行的值的比較器,而不是數組中的元素?
您需要繼承IComparable接口在很多類,而不是一類。將基類對象與派生類對象進行比較的唯一有意義的方法。 –