在单个情况下,我从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" ) );
}

最佳答案

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

关于c# - List <T> .BinarySearch返回意外结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35192934/

10-09 09:34