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

没有linq我怎么能做到这一点?(预计 linq 存在性能缺陷(我使用的是 .NET 3.5)

最后编辑

我的目标是考虑性能的非 linq 解决方案,并且我对每个都使用 2,例如 alireza 解决方案(不知道,如果我打对了电话)

有更好的解决方案吗?泰

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 回答