1

我确实有列表控件,我在其中添加项目。我有另一个用于比较的通用列表说列表,我想比较列表控件的项目,如果我找到匹配项,我不想将它包含在我的另一个列表说列表中。

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

问题是:

它在我的前列表中造成重复,如何完成?

4

1 回答 1

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();
于 2013-03-26T04:41:30.280 回答