-1
ClassA { List<ClassB> List1;}
ClassB { List<ClassC> List2;}
ClassC { int ID; }
ClassD { int ID; }
List<ClassD> List3;

次のシグネチャを持つメソッドがあります。

SetValues (ref ClassA ObjectA, List<ClassD> List3)

ClassC オブジェクトにいくつかのプロパティを設定したいと考えています。ClassB には ClassC オブジェクトのリストがあり、ClassC と ClassD を ID で関連付けたいと考えています。

どうすればlinqなしでそれを行うことができますか? (linqにパフォーマンス上の欠陥があることを期待しています(私は.NET 3.5を使用しています)

最終編集

私はパフォーマンスを考えて非 linq ソリューションを目指していましたが、alireza ソリューションのようにそれぞれに 2 つを使用しています (正しい呼び出しを行ったかどうかはわかりません)。

より良い解決策はありますか?タイ

4

2 に答える 2

1

refまず、リストは参照型であるため、リストの内容を変更する必要はありません。

ClassB次に、関連するオブジェクトをどのように見つけますか? ここでは、 と呼ばれる識別子と、変更したいID別のプロパティがあると仮定します。SomeProperty

public class ClassC
{
    public int ID { get; set; }
    public string SomeProperty { get; set; }
}

Enumerable.Joinこれで、関連情報を格納するために と匿名型の両方をリンク するために使用できるようになりました。

public static void SetValues(List<ClassB> listOfB, List<ClassC> listOfC)
{
    var bAndC = from b in listOfB
                from bc in b.List2
                join c in listOfC
                on bc.ID equals c.ID
                select new{ bc, c };
    foreach(var both in bAndC)
    {
        both.bc.SomeProperty = both.c.SomeProperty;
    }
}
于 2013-10-07T10:57:45.090 に答える
1

BartoszKPが 言ったようrefに、必要ありません。コレクションとネストされたコレクションを繰り返すだけです。

SetValues (List<ClassB> List1, List<ClassC> List3)
{
    foreach(classB b in list1)
    {
       foreach(classC c in b.List2)
       {
          c.Property1 = someValue;// set a property here
          .... 
          ....
          .... and similar things here
       }
    }
}
于 2013-10-07T10:48:58.680 に答える