2013-03-29 48 views
1

我採取了哪些工作正常。我很好奇,如果有更好的方法來通過Linq完成這個。目前我正在聲明一個ArrayList,然後填充它然後運行。我可以運行一個單一的LINQ語句來拉動Windows程序,然後追加Linux程序的列表?將兩個對象聲明爲一個列表?

foreach (var winProgram in allWinPrograms.Descendants("Programs").Select(p => new 
{ 
    progName = p.Element("ProgramName").Value 
})) 
{ 
    alTemp.Add(winProgram.progName.ToString()); 
} 

foreach (var linProgram in allLinPrograms.Descendants("Programs").Select(p => new 
{ 
    progName = p.Element("ProgramName").Value 
})) 
{ 
    alTemp.Add(linProgram.progName.ToString()); 
} 

foreach (string newProgram in alTemp) 
{ 
    if (!alPrograms.Contains(newProgram)) 
    { 
     alPrograms.Add(newProgram); 
    } 
} 

回答

2

假設的allWinProgramsallLinPrograms後代都是同一類型的,你應該能夠使用LINQ的Concat這樣的:

var sorted = allWinPrograms.Descendants("Programs") 
    .Concat(allLinPrograms.Descendants("Programs")) 
    .Select(p => p.Element("ProgramName").Value.ToString()) 
    .Distinct(); 
+0

注意,如果列表中他將這些項目的啓動,他可以用'AddRange'的項目(基於這個答案的查詢)添加到列表之前,曾在它的項目。如果沒有,那麼可能只是使用'ToList'並完全替換列表。 – Servy

0

簡短的解決方案

foreach (var prg in allWinPrograms.Union(allLinPrograms).Select(x => x).Where(prg =>!allPrograms.Contains(prg))) 
{ 
    allPrograms.Add(prg); 
} 

朗解決方案

foreach (var prg in allWinPrograms.Union(allLinPrograms).Select(x => x)) 
{ 
    if (!allPrograms.Contains(prg)) 
    { 
     allPrograms.Add(prg); 
    } 
} 
-1

它是如何讀取會是如果你在同一行的一切嗎?您可能會從linq執行中獲得一些性能優勢,但也要記住乾淨的代碼。

 foreach (var winProgram in allWinPrograms.Descendants("Programs").Select(p => new 
     { 
      progName = p.Element("ProgramName").Value 
     })) 
     { 
      alTemp.Add(winProgram.progName); 
     } 

     foreach (var linProgram in allLinPrograms.Descendants("Programs").Select(p => new 
     { 
      progName = p.Element("ProgramName").Value 
     })) 
     { 
      alTemp.Add(linProgram.progName); 
     } 

     foreach (string newProgram in alTemp.Cast<string>().Where(newProgram => !alPrograms.Contains(newProgram))) 
     { 
      alPrograms.Add(newProgram); 
     } 
+0

因爲凡downvote我的回答,請閱讀:HTTP://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882,也許選擇其他職業;) – Marco

+0

似乎在這個問題莫名其妙地得到了所有的答案在幾分鐘內通過了投票。 –

+1

更正:好像有人downvoted你的答案,並在響應你決定downvote其他人誰花時間來回答。 –