使用 For Each 在 C# 中合并两个列表

3
我有两个C#列表对象,如下所示:

List A

[0]
    Count="0",
    CountType="0",
    InvTpeCode="DLX"
[1]
    Count="0",
    CountType="0"
    InvTpeCode="STD"

List B

[0]
    Count="2",
    CountType="17"
[1]
    Count="12",
    CountType="14"

我尝试使用foreach循环将列表a的值更新为列表b的值,但不幸的是我无法获得期望的输出。

注意: 两个列表的大小相同


1
请问您能否提及期望的输出结果? - Biswabid
A[0]的值应该是多少? - Berkay Yaylacı
这两个集合的大小是否相同?如果不相同,它们之间进行了什么比较? - Nikhil Vartak
你能否在问题中添加一些代码,展示你尝试过的内容吗?不清楚你是否使用了对象,这可能是问题的一部分。 - Daniel Hollinrake
在你的情况下,简单的for循环可能会很有用。 - Jaydip Jadhav
@Berkay,它应该从列表B进行更新,因此列表A [0]应该使用列表B [0]进行更新。 - Melvin
4个回答

5

除了使用for循环,您还可以使用Zip

var result = A.Zip(B, (a, b) => new Item {
                             InvTpeCode = a.InvTpeCode,
                             CountType = b.CountType, 
                             Count = b.Count });

1
+1 因为你没有像其他人一样复制粘贴答案,而且我以前从未遇到过 Zip()。太喜欢它了。 - Dave Becker
@fubo 你救了我的一天。我所做的是读取一个XML文件,在此过程中,由于使用属性标签,我得到了所有的XML数据分离。然后我一直在寻找一种将分离的XML数据合并的方法,但是你让它变得容易了,这是我整天苦苦寻找答案的问题。非常感谢! - Melvin

2
如果列表大小相同,则使用for循环就足够了:
for (int i=0; i< A.Count();i++)
{
    A[i].Count = B[i].Count;
    A[i].CountType = B.CountType;
}

1
一个 foreach 循环在这里不切实际,我会执行以下操作:
for(int i=0; i < A.Count(); i++) 
{
    A[i].Count = B[i].Count;
    A[i].CountType = B[i].CountType;
}

但要记住,如果A列表比B列表长,这将很难消除。


1
不需要在 < A.Length -1 上加上 -1。如果列表长度为 1,则循环将永远不会开始。另外,Length 仅适用于数组,我认为你的意思是 Count() - Dave Becker
是的,你说得对,我编辑了答案。但是似乎并没有太大帮助,因为有几个答案内容相同... - Kris
是的,似乎有很多非常相似的答案。不过,感谢评论,你的回答目前排在首位 :) - Dave Becker

0

首先要确保列表的大小相同。

var index = 0;
foreach ( ObjA itemA in listA) {
  replaceValues(ObjA, listB[index]);
  index++;
}

方法replaceValues应该用listB中相同位置的项的属性替换ObjA的属性。 但我认为在这里使用foreach没有意义。可以使用简单的for循环-因为您无论如何都需要当前元素的索引。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接