在List <list>上设置其他列表</list>的值

时间:2013-10-07 10:43:30

标签: c# .net performance list

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对象列表,我想通过id将ClassC和ClassD联系起来。

如果没有linq我怎么能这样做? (期待linq有性能缺陷(我使用的是.NET 3.5)

最后编辑

我的目标是考虑性能的非linq解决方案,我正在使用2来代表alireza解决方案(如果我做出了正确的电话,那就不知道了)

有更好的解决方案吗? TY

2 个答案:

答案 0 :(得分: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
       }
    }
}

答案 1 :(得分: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;
    }
}