在列表<列表>上设置其他列表中的值
本文关键字:列表 其他 设置 | 更新日期: 2023-09-27 18:34:08
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
正如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
}
}
}
首先,您不需要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;
}
}