如何仅使用部分文本搜索列表框项目

时间:2014-06-25 16:19:25

标签: c# winforms listbox-control

我有一个C#WinForms应用程序。列表框中填充了以下格式的值:

category:user:id
Food:tester:17

现在,我需要知道一个项目是否包含在此列表框中,只知道类别和ID,我不知道用户。所以从技术上讲,我需要做这样的事情(伪代码):

if(MyListBox.Items.Contains("Food:*:17"))

其中*表示“任何东西”。有没有办法做到这一点?

3 个答案:

答案 0 :(得分:2)

假设列表框中直接填充了字符串,最简单的方法是linq和regex的组合:

 if(MyListBox.Items.Cast<string>().Any(s => Regex.IsMatch(s, "Food:.*:17")))  //(For RegEx: using System.Text.RegularExpressions )

或更严格,如果项目总是值的组合:值:值,您只检查第一个和第三个值:

if (MyListBox.Items.Cast<string>().Any(s => { var values = s.Split(':'); return values[0] == "Food" && values[2] == "17"; }))

答案 1 :(得分:0)

尝试这样的事情

var res =
               MyListBox.items.SingleOrDefault(
                    item =>
                    item.Contains("Food:") && item.Contains(":17") &&
                    item.IndexOf(":17", StringComparison.InvariantCulture) >
                    item.IndexOf("Food:", StringComparison.InvariantCulture));
                if ( !string.IsNullOrEmpty(res))
            {
              //your code here 
            }



            }

答案 2 :(得分:0)

您可以执行类似

的操作
var value = MyListBox.Items.Cast<string>()
    .FirstOrDefault(m => m.Contains("Food:") && m.Contains(":17"));
if (value != null) {
    // you have a match
}