2013-03-26 32 views
1

我有列表控件,我在其中添加項目。 我有另一個通用列表說比較列表,我想比較列表控件的項目,如果我找到了匹配,我不想包括它在我的另一個列表說話列表。使用c#進行比較後,從列表<>中添加列表項目

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

我不知道,我才明白什麼是你想實現的,但是這個代碼看起來可疑對我說:

foreach(Ex li in ex) // 
{ 
    if (s1.Name.Equals(li.ToString())) 
    { 
     flag=true; 
     ex.Add(s1.Name); 
    } 
} 

所以,你加s1.Name列出每一次當你發現在同一個元素列表?這種方式ex將填充元素等於第一個添加元素。

也許這樣的事情會做的工作:使用LINQ Count

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

較短方式:

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(); 
+0

謝謝!特別是對於linq語句。 – Emma 2013-03-26 05:11:31