比较列表<;字符串>;并实现所需的控制
本文关键字:控制 实现 gt 列表 lt 字符串 比较 | 更新日期: 2023-09-27 18:09:39
我有两个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
}
}
}
但我知道这不是一个合适的方法,所以有人能告诉我实现的最佳方法吗
您要做的是将第一个列表中的项目散列到一个集合中,然后验证第二个列表中每个项目是否在集合中。不幸的是,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
}
}
使用Intersect方法很容易:
if (listB.Intersect(listA).Count() > 0)
{
//enable Control
}
else
{
//disable control
}
我想你正在寻找类似的东西
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");
在fx 2.0中,您可以这样做:
string b = listA.Find(delegate(string a) { return listB.Contains(a); });
if (string.IsNullOrEmpty(b))
{
//disable control
}
else
{
//enable control
}
Control.Enabled = listB.Intersect(listA).Any()
请注意,Any((只会检查是否至少有一项。当您只需要检查是否至少有一个项目时,Count((>0将评估整个集合
编辑:如果您在。NET 2.0环境中,然后您可以循环并执行以下操作:
foreach (int item in listB)
{
if (listA.Contains(item))
return true;
}
return false;