繁体   English   中英

C#填充列表 <T> 来自两个数组或定界字符串

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM