如何从List两个字符串数组(名称,值)

本文关键字:两个 字符串 数组 名称 List ClassName | 更新日期: 2023-09-27 17:55:51

我有以下类:

class Node
{
   public string NameField{ get; set; }
   public string ValueField{ get; set; }
}

并且还有一个节点列表作为var test = new List<Node>,我需要将两个字符串数组作为string[],第一个包含所有NameField,第二个包含所有ValueField,我做了以下代码:

    string[] NameField = new string[test.Count];
    string[] ValueField = new string[test.Count];
    int i = 0;
    foreach (var s in prefsNameValueArray)
    {
        NameField[i] = s.CTMAttrName;
        ValueField[i] = s.CTMAttrValue;
        i++;
    }

我可以使用 LINQ 做同样的事情吗,有人可以帮助我改进这段代码吗?

提前感谢,拉姆齐

如何从List<ClassName>两个字符串数组(名称,值)

使用 Linq:

string[] NameFields = nodes.Select(n => n.NameField).ToArray();
string[] ValueFields = nodes.Select(n => n.ValueField).ToArray();

Linq 不一定是最有效的方法,因为如果您使用查询而不是集合,ToArray可能会创建一个可能太大的数组(由于加倍算法)。但它简短易读(而且大部分都足够快)。

这是 for 循环版本:

int count = nodes.Count(); // in case you want to change the collection type or use a linq query
string[] NameField = new string[count];
string[] ValueField = new string[count];
for (int i = 0; i < count; i++)
{
    NameField[i] = nodes.ElementAt(i).NameField;
    ValueField[i] = nodes.ElementAt(i).ValueField;
}
var nameField = test.Select(n => n.CTMAttrName).ToArray();
var valueField = test.Select(n => n.CTMAttrValue).ToArray();

使用 Lambda expressions ;

string[] NameField = prefsNameValueArray.Select(x=> x.NameField).ToArray();
string[] ValueField = prefsNameValueArray.Select(x=> x.ValueField).ToArray();