c#从两个数组或分隔的字符串填充list <t>

时间:2015-10-29 08:17:26

标签: c# arrays

我有两个从字符串填充的数组:

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>的属性?或者如何直接从字符串中填充列表将其拆分为相应的属性?

4 个答案:

答案 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。