二进制搜索文本框

时间:2013-03-08 00:48:30

标签: c# asp.net listbox

我有一个文本框,我需要输入文件名,但文件名不一定只是部分文件名。

例如

iexplorere.exe,它将存储在列表框中。然后我必须输入woule是“iexpl”然后结果将在一个带有完整文件名的消息框中。

我遇到了二进制搜索方法的问题。

到目前为止我的代码是:

private void btnSearch_Click(object sender, RoutedEventArgs e)
{


        fValue = bList.BinarySearch(sValue, StringComparison.OrdinalIgnoreCase);
        MessageBox.Show("The Following Files were found \n" + fValue);
    }
    catch (Exception)
    {
        // Alerts the user path file doesnt exist
        MessageBox.Show("The File Doesn't Exist!");
    }

}

1 个答案:

答案 0 :(得分:3)

BinarySearch并不意味着部分搜索,因此这是您的第一个问题。它试图使用二进制搜索算法匹配一个确切的术语。

如果您的列表框包含所有类型String的项目,您可以尝试使用此选项:

fValue = bList.Cast<String>()
    .FirstOrDefault(t =>
                    t.StartsWith(sValue, StringComparison.OrdinalIgnoreCase));

这将获得IEnumerable类型String,然后找到以sValue中的值开头的第一个项目。

编辑:由于您标记了此ASP .NET,您可能会尝试使用此一个衬管。这将获得所有匹配项目的集合,而不仅仅是上面的第一个:

var matchingItems = lstbxResults.Items
    .Cast<ListItem>()
    .Where(t => t.Text.StartsWith(sValue));