记录 BinarySearch 方法行为的MSDN页面显示,被搜索的数组和值都可以实现 IComparable:
1) 页面描述
的任何一个
value
或每个元素都array
必须实现IComparable
用于比较的接口。
2) 此外,该方法抛出一个InvalidOperationException
if
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
.
如何让值的比较器运行,而不是数组中的元素?