我很难找到一种简单的方法来搜索我用于匹配用户指定字符串的List<>
字符串,我甚至不确定我是以最好的方式去做它但我得到了什么到目前为止是:
// This is the input string.
string input = userDefinedStr.ToLower(); //New variable and made into lower cases.
for (int i = 0; i < listBox1.Items.Count; i++)
{
if (listBox1.Items[i].ToString().IndexOf(input, stringComparison.OrdinalIgnoreCase) >= 0)
{
listBox1.SetSelected(i, true);
}
else
{
MessageBox.Show("Sorry, There was no matches found.", "An oupps happend!");
}
}
问题是List
中包含用户定义字符串的一个字符串可能更多,我想最好的方法是显示{{1}中的所有List<string>
个匹配项而不只是标记找到的第一个。
或者可以用另一种更有效的方式完成吗?!?
我是C#的新手并且编码一般,所以我不觉得我知道最好的方式,我已经阅读了很多文章和帖子,但我找不到那个指向我的正确方向。
答案 0 :(得分:1)
您可以过滤列表框的内容,仅显示与搜索条件匹配的项目。所有其他项目都已删除。这意味着listBox1
不包含实际数据,而只包含数据视图,完整数据存储在其他位置。还必须有一种方法让用户重置过滤器,以便再次获得完整的数据集。
答案 1 :(得分:1)
您正在展示一个良好的开端,但在if
内部使用for
语句,您将会为每个不匹配的项目弹出一个消息框。
如果您希望使用目前为止的代码,只需在bool
(初始化为false)之前添加for
,并在找到匹配项时将其设置为true。完成for
后,请测试bool
,如果仍然为假,则未找到匹配项,因此您应该显示消息框。
我怀疑它可以在Linq中用更少的键击来完成,但它可能不那么容易阅读/理解,因为并且可维护(/易于阅读/理解)代码优于聪明的,因为你将稍后必须修复它。