我有两个从字符串填充的数组:
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>
的属性?或者如何直接从字符串中填充列表将其拆分为相应的属性?
答案 0 :(得分:4)
您可以使用扩展方法Enumerable.Zip
并行处理两个数组并为每对创建tarBuyInternet
:
var listTarBuyInternet = descs.Zip(prms, (d, p) => new tarBuyInternet { desc = d, param = p }).ToList();
答案 1 :(得分:3)
您可以循环遍历数组,并添加到列表中(假设数组具有相同的长度):
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();
答案 2 :(得分:2)
@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();
应该工作。
答案 3 :(得分:0)
由于您的问题似乎是要求C#编译器通过直接以某种方式直接注入splitted数组来自动填充列表,您需要告诉编译器如何从数组中读取并分配属性值。您需要迭代以创建tarBuyInternet实例,然后将这些实例添加到listTarBuyInternet。