在循环中查找特定值

时间:2014-01-30 19:50:17

标签: c# for-loop combobox enums iteration

我在ComboBox内使用了枚举。我希望它允许编辑,以便用户可以在其中键入内容。我将枚举转换为string[] arrayItems,而listItems是枚举列表的长度。

现在我想检查用户文本输入:如果未列出,则应显示该项未列在其中的消息。

但对于我的代码(如下),它多次显示错误:

// Converted enum to string[] before

for (int i = 0; i < listItems; i++)
{
    if (comboBox1.Text != arrayItems[i])
    {
        message = string.Format("Sorry! " + comboBox1.Text + " not found.");
    }
}

每次启动时都显示错误,因为它遍历列表中的每个元素。我希望如果这可以检查整个枚举列表并在输入错误时给出错误。

5 个答案:

答案 0 :(得分:2)

您可以将循环更改为

bool ok = false;
for (int i = 0; i < listItems; i++)
{
    if (comboBox1.Text == arrayItems[i])
    {
        ok=true;
        break;
    }
}

if(ok==false)
{
    message = string.Format("Sorry! " + comboBox1.Text + " not found.");
}

答案 1 :(得分:1)

if(arrayItrmd.Contains(combobox1.Text))
{
    //logic if trur
}

答案 2 :(得分:0)

您可以使用LINQ的All。顾名思义,只有当所有元素都与您的查询相对应时才会出现这种情况。它基本上相当于!Any

if (arrayItrmd.All(item => item != comboBox1.Text))
{
    message = string.Format("Sorry! " + comboBox1.Text + " not found.");
}

这意味着“如果arrayItrmd中的每个元素都不等于comboBox1的文本,请分配消息。”

答案 3 :(得分:0)

您可以忽略循环的使用

if(tmpImageArray.FirstOrDefault(a => a == comboBox1.Text) == default(String))
{
   message = comboBox1.Text + " not found";
}
else{
   message = comboBox1.Text + " found";
}

答案 4 :(得分:0)

我已经解决了这个问题,

首先我的枚举,我将绑定到我的组合框

 public enum comboboxVals
    {
        one, two, three
    }

然后像我这样设置我的组合框的数据源

  comboBox1.DataSource = Enum.GetNames(typeof(comboboxVals));

然后在我的一个组合框事件中实现代码,以检查值是否有效,如组合框离开,验证和验证事件..

 private void comboBox1_Validating(object sender, CancelEventArgs e)
        {
            var cbx = sender as ComboBox;
            if (!Enum.IsDefined(typeof(comboboxVals), cbx.Text))
            {
                MessageBox.Show(cbx.Text + " not in the list");
                e.Cancel=true;
            }
            else
            {
                // Implement your logic here
            }


        }