[英]c# populate list<T> from two arrays or delimited strings
我有两个从字符串填充的数组:
public partial class tarBuyInternet
{
public string desc { get; set; }
public string param { get; set; }
}
public List<tarBuyInternet> listTarBuyInternet;
// …
string[] descs;
string[] prms;
descs = jarrObj1["desc"].ToString().Split(GlobalClass.strDelimiter);
prms = jarrObj1["params"].ToString().Split(GlobalClass.strDelimiter);
如何用相应的数组填充List<TarBuyInternet>
的属性? 或者如何直接将字符串拆分成相应的属性来填充列表?
您可以使用扩展方法Enumerable.Zip
并行遍历两个数组,并为每对创建一个tarBuyInternet
:
var listTarBuyInternet = descs.Zip(prms, (d, p) => new tarBuyInternet { desc = d, param = p }).ToList();
您可以遍历数组,然后添加到列表中(前提是数组具有相同的长度):
for (var i=0; i<descs.Length; i++){
listTarBuyInternet.Add(new tarBuyInternet{
desc = descs[i];
param = prms[i];
});
}
既然有讨论说这不能在linq中完成,所以这里有一个怪兽可以完成工作(即使不使用Zip
,这也是这里的正确答案):
var result =
from d in descs.Select((item, index) => new {item, index})
join p in prms.Select((item, index) => new {item, index})
on d.index equals p.index
select new tarBuyInternet{desc = d.item, param = p.item};
listTarBuyInternet = result.ToList();
@Kajal Sinha好吧,实际上可以。
编辑@SWeko:对,我不好。 然而,这应该工作^^
listTarBuyInternet = jarrObj1["desc"].ToString().Split(GlobalClass.strDelimiter)
.Zip(jarrObj1["params"].ToString().Split(GlobalClass.strDelimiter),
(d, p) => new tarBuyInternet { desc = d, param = p }).ToList();
应该管用。
由于您的问题似乎是在要求C#编译器通过以某种方式直接注入拆分的数组来自动填充列表,因此您需要告诉编译器如何从数组中读取并分配属性值。 您需要进行迭代以创建tarBuyInternet实例,然后将这些实例添加到listTarBuyInternet。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.