如何搜索仅包含部分文本的列表框项
本文关键字:文本 列表 包含部 何搜索 搜索 | 更新日期: 2023-09-27 18:10:11
我有一个c# WinForms应用程序。有一个列表框,里面填满了以下格式的值:
category:user:id
Food:tester:17
等。
现在,我需要得到如果一个项目包含在这个Listbox中,只知道类别和ID,我不知道用户。技术上讲,我需要这样做(伪代码):
if(MyListBox.Items.Contains("Food:*:17"))
,其中*表示"任何东西"。有办法做到这一点吗?
假设列表框直接用字符串填充,最简单的方法是linq和regex的组合:
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
}
}