我有一个C#WinForms应用程序。列表框中填充了以下格式的值:
category:user:id
Food:tester:17
等
现在,我需要知道一个项目是否包含在此列表框中,只知道类别和ID,我不知道用户。所以从技术上讲,我需要做这样的事情(伪代码):
if(MyListBox.Items.Contains("Food:*:17"))
其中*表示“任何东西”。有没有办法做到这一点?
答案 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
}