c#二进制搜索方法“Unhandled Exception:System.IndexOutOfRangeException:”

时间:2016-12-15 17:16:15

标签: c# json binary-search

无法将此二进制搜索结果转换为int。到目前为止,所有代码都能正常运行。我想要一个名字并显示json实例化的内容。我已经把它排序了。谢谢

“Unhandled Exception:System.IndexOutOfRangeException:Index超出了数组的范围。”

 static void SearchEntity(Entity[] entities)
    {
            Entities result = new Entities();
            Console.WriteLine("Which name to find ");
            string userInput = Console.ReadLine();
            string[] title = new string[10000];

 //-------------
            Console.Write("Search Keyword : ");
            string searchKeyword = Console.ReadLine();
            if (userInput.ToLower() == "title")
            {
               title = entities.Select(m => m.Title).ToArray();

                Array.Sort(title);
                Sorting.Sort(entities, userInput);                                                 

                var tmp = Array.BinarySearch<string>(title, userInput);



                if (Convert.ToInt32(tmp) == -1)
                {
                    Console.WriteLine("No data found!");
                    return;
                }
                result = entities[Convert.ToInt32(tmp)];
                entitiesPrint(result);
            }

1 个答案:

答案 0 :(得分:1)

来自Array.BinarySearch文档:

  

指定数组中指定值的索引(如果找到值);否则,为负数。如果未找到值且值小于数组中的一个或多个元素,则返回的负数是第一个元素的索引的按位补码,该索引大于value。如果未找到值且值大于数组中的所有元素,则返回的负数是(最后一个元素的索引加1)的按位补码。如果使用非排序数组调用此方法,则返回值可能不正确,并且可能返回负数,即使数组中存在值也是如此。

如果没有找到确切的值,该方法可以返回所有种类的负数,而不仅仅是-1。您将要使用以下内容:

if (tmp < 0) 
    // ...

还值得注意的是Array.BinarySearch已经返回int,因此对Convert.ToInt32的调用是多余的。