我有一个 C# WinForms 应用程序。有一个以这种格式填充值的列表框:
category:user:id
Food:tester:17
等等
现在,我需要获取一个项目是否包含在这个 Listbox 中,只知道类别和 ID,我不知道用户。所以从技术上讲,我需要做这样的事情(伪代码):
if(MyListBox.Items.Contains("Food:*:17"))
其中 * 表示“任何东西”。有没有办法做到这一点?
我有一个 C# WinForms 应用程序。有一个以这种格式填充值的列表框:
category:user:id
Food:tester:17
等等
现在,我需要获取一个项目是否包含在这个 Listbox 中,只知道类别和 ID,我不知道用户。所以从技术上讲,我需要做这样的事情(伪代码):
if(MyListBox.Items.Contains("Food:*:17"))
其中 * 表示“任何东西”。有没有办法做到这一点?
假设列表框直接用字符串填充,最简单的方法是 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"; }))
你可以做类似的事情
var value = MyListBox.Items.Cast<string>()
.FirstOrDefault(m => m.Contains("Food:") && m.Contains(":17"));
if (value != null) {
// you have a match
}
尝试这样的事情
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
}
}