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
答案 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;
}
}