C# c二进制搜索方法“未处理的异常:System.IndexAutoFrangeException:”

C# c二进制搜索方法“未处理的异常:System.IndexAutoFrangeException:”,c#,json,binary-search,C#,Json,Binary Search,无法将此二进制搜索结果转换为int。到目前为止,所有代码都运行良好。我想输入一个名称并显示json实例化的内容。我已经把分类放好了。谢谢 未处理的异常:System.IndexOutOfRangeException:索引超出数组的边界 static void SearchEntity(Entity[] entities) { Entities result = new Entities(); Console.WriteLine("Whic

无法将此二进制搜索结果转换为int。到目前为止,所有代码都运行良好。我想输入一个名称并显示json实例化的内容。我已经把分类放好了。谢谢

未处理的异常:System.IndexOutOfRangeException:索引超出数组的边界

 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的位补码。如果使用未排序的数组调用此方法,则返回值可能不正确,并且可能返回负数,即使数组中存在值也是如此

如果找不到精确值,该方法可以返回各种负数,而不仅仅是-1。您将要使用以下选项:

if (tmp < 0) 
    // ...

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

请查看BinarySearch的文档,了解它是如何工作的。它返回一个int。int可以是任何负数,而不仅仅是-1。我不得不问,为什么在这里使用二进制搜索?它们在已经排序的数组上工作得最好,但是如果在执行搜索之前必须手动排序数组,则会失去性能优势。我最近刚刚学习了如何使用二进制搜索。所以,它返回负值,这意味着我混淆了排序…?@似乎看到了我的答案。它返回的负数包含有关搜索结果的信息-它不会只是-1。请将代码放在else中的“if”之后,以便在返回-1时它不会运行。