2011-09-27 45 views
0

我具有两个list<string>如下比较列表<string>和使所需的控制

listA是具有由具有以下值10,20,30

如果listB包含listA元件下列值10,20,30,40

listB我想启用特定的控件,如果不是我想禁用控件

我试着用两个循环如下

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

,但我知道这是不是一个合适的人做这样任何一个可以告诉我,最好的方法通过使用相交来实现这一

回答

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

这很容易方法:

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

我想解决它在2.0帧的工作 – Dotnet

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

请注意,任何()将只检查,看看是否有至少一个项目。 COUNT()> 0将评估整个集合时,你只需要检查,如果有至少一个项目

编辑:如果你是在.NET 2.0环境,那么你就可以循环并做到这一点:

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

return false; 
1

我认为你正在寻找这样的事情

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

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

差异应该给你哪些不匹配其他的一切就都被匹配的人。

2.0

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

在FX 2.0,你可以做这样的:

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