那里。
我有两个XmlNode列表。我想将它们组合成第三个列表,或者理想地直接组合到一个复选框列表中,其中每个项目通过它们的索引与另一个列表的项目相对应,产生一个组合项目的输出,即list1; 1,2,3。list2; a,b,c。项目list3; 1a,2b,3c。
不“1,2,3,a,b,c。”
我所使用的代码使用了两个foreach循环,但输出了所有可能的组合,我知道为什么,我似乎无法找到正确的代码,所以这只是我所在的一个例子。
var lsMac = xnList.Cast<XmlNode>().Select(node => node.InnerText);
var lsDisp = xnList1.Cast<XmlNode>().Select(node => node.InnerText);
foreach (var m in lsMac)
{
foreach (var d in lsDisp)
{
chkboxMAC.Items.Add(m + " " + d);
}
}
也许Join会是一个很好用的方法吗?
谢谢!
答案 0 :(得分:1)
您可以使用Linq的Zip。
var lsMac = xnList.Cast<XmlNode>().Select(node => node.InnerText);
var lsDisp = xnList1.Cast<XmlNode>().Select(node => node.InnerText);
var result = lsMac.Zip(lsDisp, (m, d) => m + " " + d);
foreach(var x in result) chkboxMAC.Items.Add(x);
Zip将枚举两个枚举。
答案 1 :(得分:1)
您应该为此目的使用LINQ.ZIP
这里是小提琴https://dotnetfiddle.net/5uCqZm
的内容
var foo= new List<int> {1, 2, 3};
var bar= new List<string> {"a", "b", "c"};
var result = foo.Zip(bar, (a, b) => {
return a.ToString() + b;
});
答案 2 :(得分:1)
作为Zip()
在其他答案中的替代方案,您可以使用Select()
:
var result = lsMac.Select((item, index) => item + " " + lsDisp.ElementAt(index));
或者使用ToList()
[]
按索引获取元素
var lsDispList = lsDisp.ToList();
var result = lsMac.Select((item, index) => item + " " + lsDispList[index]);