0

我有以下课程:

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 做同样的事情吗,有人可以帮我改进这段代码吗?

在此先感谢,拉姆齐

4

3 回答 3

2

使用 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;
}
于 2013-01-24T12:14:54.963 回答
1
var nameField = test.Select(n => n.CTMAttrName).ToArray();
var valueField = test.Select(n => n.CTMAttrValue).ToArray();
于 2013-01-24T12:15:03.903 回答
1

使用Lambda expressions;

string[] NameField = prefsNameValueArray.Select(x=> x.NameField).ToArray();
string[] ValueField = prefsNameValueArray.Select(x=> x.ValueField).ToArray();
于 2013-01-24T12:15:33.510 回答