我有List控件,我在其中添加项目。 我有另一个通用列表,比较说List,我想比较List控件的项目,如果我找到了匹配,我不想把它包含在我的另一个列表说列表中。
foreach( S s1 in S_list)
{
if (ex.Count > 0) // If list not empmty
{
foreach(Ex li in ex) //
{
if (s1.Name.Equals(li.ToString()))
{
flag=true;
ex.Add(s1.Name);
}
}
}
else
{
ex.Add(s1.Name);
}
}
问题是:
它导致我的前列表重复,如何完成它?
答案 0 :(得分:1)
我不确定我是否理解你想要实现的目标,但这段代码看起来很可疑:
foreach(Ex li in ex) //
{
if (s1.Name.Equals(li.ToString()))
{
flag=true;
ex.Add(s1.Name);
}
}
那么,每次在列表中找到相同的元素时,都会将s1.Name
添加到列表中?这种方式ex
将填充与第一个添加元素相同的元素。
可能这样的事情会起作用:
foreach( S s1 in S_list)
{
boolean foundInEx = false;
foreach(Ex li in ex) //
{
if (s1.Name.Equals(li.ToString()))
{
foundInEx = true;
break;
}
}
if(!foundInEx)
{
ex.Add(s1.Name); //only executed when there is no such element in ex
}
}
使用LINQ Count:
的更短方式foreach( S s1 in S_list)
{
if(ex.Count(li => s1.Name.Equals(li.ToString()))>0)
{
ex.Add(s1.Name); //only executed when there is no such element in ex
}
}
如果您想从列表中获取唯一元素,也可以使用LINQ Distinct:
var uniqueNames = S_list.Select(x => x.Name).Distinct();