Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从列表中创建<;类名>;双字符串数组(名称、值)?_C#_Silverlight_C# 4.0_Silverlight 5.0 - Fatal编程技术网

C# 如何从列表中创建<;类名>;双字符串数组(名称、值)?

C# 如何从列表中创建<;类名>;双字符串数组(名称、值)?,c#,silverlight,c#-4.0,silverlight-5.0,C#,Silverlight,C# 4.0,Silverlight 5.0,我上过以下课程: class Node { public string NameField{ get; set; } public string ValueField{ get; set; } } 还有一个节点列表,如var test=new list,我需要制作两个字符串数组作为string[],第一个包含所有名称字段,第二个包含所有值字段,我编写了以下代码: string[] NameField = new string[test.Count]; string[

我上过以下课程:

class Node
{
   public string NameField{ get; set; }
   public string ValueField{ get; set; }
}
还有一个节点列表,如
var test=new list
,我需要制作两个字符串数组作为
string[]
,第一个包含所有名称字段,第二个包含所有值字段,我编写了以下代码:

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

提前感谢,, Ramzy与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;
}
int count=nodes.count();//如果要更改集合类型或使用linq查询
字符串[]名称字段=新字符串[计数];
字符串[]值字段=新字符串[计数];
for(int i=0;i
使用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;
}
int count=nodes.count();//如果要更改集合类型或使用linq查询
字符串[]名称字段=新字符串[计数];
字符串[]值字段=新字符串[计数];
for(int i=0;i
使用
Lambda表达式

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

使用
Lambda表达式

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