0

私は次のクラスを持っています:

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

また、ノードのリストをとしてvar test = new List<Node>、2つの文字列配列をとして作成する必要がありますstring[]。最初はすべてのNameFieldを含み、2番目はすべての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を使用して同じことを行うことはできますか?誰かがこのコードを改善するのを手伝ってくれますか?

よろしくお願いします、Ramzy

4

3 に答える 3

2

Linq の場合:

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

ToArrayコレクションの代わりにクエリを使用すると、(倍加アルゴリズムのために) 大きすぎる配列を作成する可能性があるため、Linq は必ずしも最も効率的な方法ではありません。しかし、それは短くて読みやすいです (そしてほとんどの場合十分に高速です)。

これは 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 に答える