2014-06-25 33 views
0

我有一個C#WinForms應用程序。有這種格式填入值列表框:如何搜索僅包含部分文本的列表框項目

category:user:id 
Food:tester:17 

現在,我需要獲得某件商品包含在這個列表框,只知道類別和ID,我不知道用戶。所以在技術上,我需要做這樣的事情(僞代碼):

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

*其中*表示「任何東西」。有沒有辦法做到這一點?

回答

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"; })) 
+0

非常有趣的解決方案是兩個,謝謝 :) –

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 
      } 



      } 
+0

這將意味着我得到「真」,如果有任何食物,任何ID 17,我需要它在一個項目 –

+0

這是糾正真的感謝 –

0

你可以做類似

var value = MyListBox.Items.Cast<string>() 
    .FirstOrDefault(m => m.Contains("Food:") && m.Contains(":17")); 
if (value != null) { 
    // you have a match 
} 
相關問題