比较List <string>并启用所需的控件</string>

时间:2011-09-27 06:35:56

标签: c# asp.net .net-2.0

我有两个list<string>如下

listA具有以下值10,20,30,40

listB具有以下值10,20,30

如果listB包含listA元素,我想启用特定控件,如果不是我想禁用控件

我尝试使用两个循环如下

for(int ilist1=0;ilist1<listA.count;ilist1++)
{
  for(int ilist2=0;ilist2<listB.count;ilist2++)
  {
      if(listA[ilist1]==listB[ilist2])
      {
           //Enable particular control
      }
  }
}

但我知道这不合适,任何人都可以告诉我实现这个目标的最佳方法

5 个答案:

答案 0 :(得分:2)

使用Intersect方法很容易:

    if (listB.Intersect(listA).Count() > 0)
    {
        //enable Control
    }
    else
    {
        //disable control
    }

答案 1 :(得分:2)

您要做的是将第一个列表中的项目哈希到一个集合中,然后验证第二个项目中的每个项目是否在集合中。很遗憾,HashSet<>不可用,因此您可以获得的距离最近的是Dictionary<,>

这样做:

Dictionary<string, string> set = new Dictionary<string, string>();
foreach (string item in listA)
{
    set.Add(item, item);
}

foreach (string item in listB)
{
    if (!set.ContainsKey(item))
    {
        //Enable particular control
    }
}

答案 2 :(得分:1)

我认为你正在寻找像这样的东西

List<string> lista = new List<string>() {"10","40","30" };
List<string> listb = new List<string>() { "10", "20" };

var diff = listb.Except<string>(lista);

diff应该给你那些不匹配的东西,否则就会匹配。

对于2.0

if (listb.TrueForAll(delegate(string s2) { return lista.Contains(s2); }))
                MessageBox.Show("All Matched");
            else
                MessageBox.Show("Not Matched");

答案 3 :(得分:1)

在fx 2.0中,您可以这样做:

    string b = listA.Find(delegate(string a) { return listB.Contains(a); });
    if (string.IsNullOrEmpty(b))
    {
        //disable control
    }
    else
    {
        //enable control
    }

答案 4 :(得分:0)

Control.Enabled = listB.Intersect(listA).Any()

请注意,Any()只会检查是否至少有一个项目。 Count()&gt;当您只需要检查是否存在至少一个项目时,0将评估整个集合

编辑:如果您在.NET 2.0环境中,那么您可以循环执行此操作:

foreach (int item in listB)
{
    if (listA.Contains(item))
       return true;
}

return false;