Добавление элемента списка в другой список - PullRequest
2 голосов
/ 04 декабря 2009

Хорошо, у меня есть класс, подобный следующему ...

public class Order
{
    private Guid id;
    [DataMember]
    public Guid ID
    {
        get { return id; }
        set { id = value; }
    }

    private List<Items> orderItems;
    [DataMember]
    public List<Items> OrderItems
    {
        get { return orderItems; }
        set { orderItems= value; }
    }

}

public class Items
{
    private string itemName;
    [DataMember]
    public string ItemName
    {
        get { return itemName; }
        set { itemName = value; }
    }

}

Когда я ссылаюсь в своем коде, у меня есть метод, который принимает в качестве параметра список «Порядок».

ACME.Order newOrder = new ACME.Order();
ACME.Items newItems = new ACME.Items();

newOrder.ID = xxx
newItems.ItemName = xxx

SendOrderWithItemsFunction(newOrder)

Вышеописанное работает нормально, однако у меня нет функции добавления для моих предметов, чтобы я мог сделать что-то вроде следующего

newOrder.Items.Add(newItem);

и

newOrder.Items = newItems

не будет работать, потому что он говорит, что не может неявно конвертировать newOrder.Items в newItems [].

Чего не хватает?

Ответы [ 5 ]

5 голосов
/ 04 декабря 2009

Я думаю, что я что-то упускаю, но newOrder.OrderItems.Add(newItem) должно работать очень хорошо, в зависимости от того, что у вас есть в посте.

Просто некоторые другие мелкие вещи:

Множественное значение класса "Items" является странным, если это только один элемент. Вероятно, это является причиной того, что это выглядело «нормально» для назначения одного элемента свойству List.

Возможно, вы вырезали его из своего поста, но каждый класс, сериализуемый WCF, должен быть помечен как «DataContract», а не только члены класса.

При инициализации таких объектов, как я думаю, гораздо проще использовать Инициализаторы типов :

var NewOrder = new ACME.Order{
     ID = xxx,
     OrderItems = new List<ACME.Item>
     {
          new ACME.Item{
               ItemName = xxx
          }
     }
};
0 голосов
/ 15 мая 2015

Если у вас есть список в списке, а метод Add () отсутствует, обходной путь - создать новый список, добавить элементы, а затем установить внутренний список в новый список. Вместо:

outerList.innerList.Add(item)

.. использовать ..

var newList = new List<ItemType>();
newList.Add(item);
outerList.innerList = newList;
0 голосов
/ 04 декабря 2009

Вы объявили newItems как тип ACME.Items, но свойство OrderItems вашего класса Order равно List<Items>. Эти типы не могут быть назначены друг другу напрямую. Таким образом, присвоение newOrder.OrderItems = newItems похоже на попытку сказать List<Items> = Items. Это невозможно из-за классов, которые вы описали выше. Вместо этого вам нужно будет добавить в список.

0 голосов
/ 04 декабря 2009

У вас есть функция добавления в свойстве Order.OrderItems:

newOrder.OrderItems.Add(newItem);

Вы даже можете добавить целый список элементов к своим OrderItems:

var someList = new List<Items>();
//populate someList here
newOrder.OrderItems.AddRange(someList);
0 голосов
/ 04 декабря 2009

Вы должны быть в состоянии сделать:

newOrder.OrderItems.Add(newItem);

Если ваш newItems [] является массивом, вам нужно сделать это:

newOrder.OrderItems.AddRange(newItem.ToList<Items>());
...