我有一個C#WinForms應用程序。有這種格式填入值列表框:如何搜索僅包含部分文本的列表框項目
category:user:id
Food:tester:17
等
現在,我需要獲得某件商品包含在這個列表框,只知道類別和ID,我不知道用戶。所以在技術上,我需要做這樣的事情(僞代碼):
if(MyListBox.Items.Contains("Food:*:17"))
*其中*表示「任何東西」。有沒有辦法做到這一點?
我有一個C#WinForms應用程序。有這種格式填入值列表框:如何搜索僅包含部分文本的列表框項目
category:user:id
Food:tester:17
等
現在,我需要獲得某件商品包含在這個列表框,只知道類別和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 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
}
}
這將意味着我得到「真」,如果有任何食物,任何ID 17,我需要它在一個項目 –
這是糾正真的感謝 –
你可以做類似
var value = MyListBox.Items.Cast<string>()
.FirstOrDefault(m => m.Contains("Food:") && m.Contains(":17"));
if (value != null) {
// you have a match
}
非常有趣的解決方案是兩個,謝謝 :) –