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
4

2 回答 2

3

试试这个:

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

您将返回一个可枚举的匿名对象,每个对象都有两个字段 -field1field2.

于 2012-05-12T14:38:34.720 回答
1

我认为这符合其目的:

首先,将您的课程更改为:(两个不同的名称)

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

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

然后,此功能会将您的第一个班级分为两个(或更多)其他班级

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 将等于 123

于 2012-05-12T14:54:12.227 回答