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

3 に答える 3

2

allWinProgramsと の子孫が同じ型であると仮定すると、次のようなallLinProgramsLINQ を使用できるはずです。Concat

var sorted = allWinPrograms.Descendants("Programs")
    .Concat(allLinPrograms.Descendants("Programs"))
    .Select(p => p.Element("ProgramName").Value.ToString())
    .Distinct();
于 2013-03-29T18:34:34.697 に答える
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);
     }
 }
于 2013-03-29T18:40:46.883 に答える
-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);
        }
于 2013-03-29T18:41:15.917 に答える