C# 列表<;T>;。返回意外结果的BinarySearch

C# 列表<;T>;。返回意外结果的BinarySearch,c#,binary-search,list-template,C#,Binary Search,List Template,在一个案例中,我从List.BinarySearch得到一个奇怪的结果。 在存在“$in”的列表中搜索“$in”时,结果为-4。 下面是一个突出问题的测试用例。只有查找“$in”的案例失败 它可能是某种保留关键字吗? 我针对.Net Framworks 3.5、4.5.2和4.6进行了编译,得到了相同的结果 [TestMethod] public void IssueWithBinarySearch() { List<string> operators = new List<

在一个案例中,我从List.BinarySearch得到一个奇怪的结果。 在存在“$in”的列表中搜索“$in”时,结果为-4。 下面是一个突出问题的测试用例。只有查找“$in”的案例失败

它可能是某种保留关键字吗? 我针对.Net Framworks 3.5、4.5.2和4.6进行了编译,得到了相同的结果

[TestMethod]
public void IssueWithBinarySearch() {
  List<string> operators = new List<string>( new[] { "$eq", "$gt", "$gte", "$lt", "$lte", "$ne", "$in", "$nin" } );

  Assert.AreEqual( 0, operators.BinarySearch( "$eq" ) );
  Assert.AreEqual( 1, operators.BinarySearch( "$gt" ) );
  Assert.AreEqual( 2, operators.BinarySearch( "$gte" ) );
  Assert.AreEqual( 3, operators.BinarySearch( "$lt" ) );
  Assert.AreEqual( 4, operators.BinarySearch( "$lte" ) );
  Assert.AreEqual( 5, operators.BinarySearch( "$ne" ) );
  Assert.AreEqual( 6, operators.BinarySearch( "$in" ) );
  Assert.AreEqual( 7, operators.BinarySearch( "$nin" ) );
}
[TestMethod]
public void IssueWithBinarySearch(){
列表运算符=新列表(新[]{“$eq”、“$gt”、“$gte”、“$lt”、“$lte”、“$ne”、“$in”、“$nin”});
Assert.AreEqual(0,operators.BinarySearch($eq));
Assert.AreEqual(1,operators.BinarySearch($gt));
Assert.AreEqual(2,operators.BinarySearch($gte));
Assert.AreEqual(3,operators.BinarySearch($lt));
Assert.AreEqual(4,operators.BinarySearch($lte));
Assert.AreEqual(5,operators.BinarySearch($ne));
Assert.AreEqual(6,operators.BinarySearch($in));
AreEqual(7,operators.BinarySearch($nin));
}

二进制搜索仅适用于排序列表。
列表必须已排序;否则,结果将不正确。

二进制搜索仅适用于排序列表。
列表必须已排序;否则,结果不正确。

谢谢,我再次检查了文档:列表必须已经根据比较器实现进行了排序;否则,结果是不正确的。谢谢,我再次检查了文档:列表必须已经根据比较器实现进行了排序;否则,结果是不正确的。