无法将此二进制搜索结果转换为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);
}
答案 0 :(得分:1)
来自Array.BinarySearch文档:
指定数组中指定值的索引(如果找到值);否则,为负数。如果未找到值且值小于数组中的一个或多个元素,则返回的负数是第一个元素的索引的按位补码,该索引大于value。如果未找到值且值大于数组中的所有元素,则返回的负数是(最后一个元素的索引加1)的按位补码。如果使用非排序数组调用此方法,则返回值可能不正确,并且可能返回负数,即使数组中存在值也是如此。
如果没有找到确切的值,该方法可以返回所有种类的负数,而不仅仅是-1。您将要使用以下内容:
if (tmp < 0)
// ...
还值得注意的是Array.BinarySearch
已经返回int
,因此对Convert.ToInt32
的调用是多余的。