2012-06-13 53 views
4

我正在创建一个允许用户存储有关其类的信息的应用程序。我的应用程序中有一个按钮,允许用户输入信息,如果它与listBox中的任何项目匹配,则应该显示关于它的信息。想要将字符串与列表框中的任何项目进行比较

但我只能得到它为listBox如位置[0]等

我的目标是得到它的一些如何比较在listBox所有项目的具体项目位置工作。任何帮助,将不胜感激。谢谢。

private void button3_Click(object sender, EventArgs e) 
    { 
     if (listBox2.Items[0].ToString() == "PersonalInfo") 
     { 
      label.Text = "test";    
     } 
    } 

回答

6

您已硬编码检查Items[0]。您需要遍历列表中的所有项目,而不是仅检查一个项目。尝试是这样的:

foreach(var item in listBox2.Items) 
{ 
    if(item.ToString() == stringToMatch) 
    { 
    label.Text = "Found a match"; 
    } 
} 

的替代,更简单的实现(这将会停止,如果/当它发现,而不是继续检查每个项目匹配)将

if(listBox2.Items.Any(item => item.ToString() == stringToMatch)) 
{ 
    label.Text = "Found a match"; 
} 
5

那么你可以使用LINQ ......是这样的:

if (listBox2.Items 
      .Cast<object>() 
      .Select(x => x.ToString()) 
      .Contains("PersonalInfo")) 
{ 
    label.Text = "test"; 
} 

或者,如果你想获得第一场比赛的细节:

var match = listBox2.Items 
        .Cast<object>() 
        .FirstOrDefault(x => x.ToString() == "PersonalInfo"); 
if (match != null) 
{ 
    // Use match here 
} 
+0

我不认为lambda表达式是必需的。简单地做ListBox.Items.Contains(StringValue)应该可以工作。 – Matt

+0

@Matt - 我在想同样的事情,但我认为问题在于Items是一个'Object'的集合,需要用'ToString'来比较(我的猜测)。 – CAbbott

+0

@Matt:你需要'Cast'调用才能使用LINQ的其余部分,并且你假设它已经*是一个字符串。 –

6

写一个循环来检查每个项目

foreach(var item in listBox2.Items) 
{ 
    if (item.ToString()== "PersonalInfo") 
    { 
    label.Text = "test"; 
    break; // we don't want to run the loop any more. let's go out    
    }  
} 
+1

为休息+1,我不认为包括这一点 – yoozer8

相关问题