从列表中添加列表项<>用c#比较后

时间:2013-03-26 04:22:41

标签: c# list

我有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);
    }
}

问题是:

它导致我的前列表重复,如何完成它?

1 个答案:

答案 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();