0

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

category:user:id
Food:tester:17

等等

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

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

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

4

3 回答 3

2

假设列表框直接用字符串填充,最简单的方法是 linq 和正则表达式的组合:

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

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

if (MyListBox.Items.Cast<string>().Any(s => { var values = s.Split(':'); return values[0] == "Food" && values[2] == "17"; }))
于 2014-06-25T16:24:27.087 回答
0

你可以做类似的事情

var value = MyListBox.Items.Cast<string>()
    .FirstOrDefault(m => m.Contains("Food:") && m.Contains(":17"));
if (value != null) {
    // you have a match
}
于 2014-06-25T16:33:40.927 回答
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 
            }



            }
于 2014-06-25T16:24:02.030 回答