我有两个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
}
}
}
但我知道这不合适,任何人都可以告诉我实现这个目标的最佳方法
答案 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;