如何从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 做同样的事情吗,有人可以帮助我改进这段代码吗?
提前感谢,拉姆齐
使用 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();