2012-05-12 16 views
1

私は以下のクラスを持っている:コレクションを分解して一部のフィールドを保存します。

class Item 
{ 
    public string[] field1; 
    public int field2; 
} 

さて私は、項目のコレクションを持っています。どのように私はこれらのコレクションは

class Item 
{ 
    public string field1; 
    public int field2; 
} 

に変換することができます私はItems.SelectMany(x => x.field1)のようなものを意味するが、私は私のコレクションの各要素に対してfiled2値を保存する必要があります。

field1:{"asd","asdf","fscsd"} 
field2:123 

-> 

field1:{"asd"} 
field2:123 

field1:{"asdf"} 
field2:123 

field1:{"fscsd"} 
field2:123 
+0

@svickです。私はループで実行できますが、それは洗練された解決策ではありません。だから...私はコミュニティに尋ねたのです – Neir0

答えて

3

はこれを試してみてください:

var res = Items.SelectMany(x => x.field1.Select(s => new {field1=s, x.field2})); 

を次の2つのフィールドを持つバック匿名オブジェクト、それぞれの列挙を取得します - field1field2

+0

驚くばかり!ありがとう – Neir0

1

私は、これは、その目的を果たすと思う:

まず、これにあなたのクラスを変更します(両方とも別の名前)

class Items 
{ 
    public string[] field1; 
    public int field2; 
} 

class Item 
{ 
    public string field1; 
    public int field2; 
} 

を、その後、この関数は2つ(またはそれ以上にあなたの最初のクラスを分割します

:)他のクラス今
public Item[] splitItems(Items item) 
{ 
    Item[] items = new Item[item.field1.length]; 
    for(int i=0;i<item.field1.length;i++) 
    { 
     items[i].field1 = item.field1[i]; 
     items[i].field2 = item.field2; 
    } 
    return items; 
} 

Items mainItem = new Items(); 
mainItem.field1 = {"asd","asdf","fscsd"}; 
mainItem.field2 = 123; 

Item[] tempItems = splitItems(mainItem); 

あなたはそれを見ることになっていますtempItems [0] .field1 = "asd";
tempItems [1] .field1 = "asdf";
tempItems [2] .field1 = "fscsd";

すべてのfield2の値は

関連する問題