在列表<列表>上设置其他列表中的值

本文关键字:列表 其他 设置 | 更新日期: 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;
    }
}