Добавление элемента списка в другой список

StackOverflow https://stackoverflow.com/questions/1844990

  •  12-09-2019
  •  | 
  •  

Вопрос

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

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[].

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

Это было полезно?

Решение

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

Еще немного придирок:

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

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

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

var NewOrder = new ACME.Order{
     ID = xxx,
     OrderItems = new List<ACME.Item>
     {
          new ACME.Item{
               ItemName = xxx
          }
     }
};

Другие советы

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

newOrder.OrderItems.Add(newItem);

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

var someList = new List<Items>();
//populate someList here
newOrder.OrderItems.AddRange(someList);

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

newOrder.OrderItems.Add(newItem);

Если ваш newItems[] представляет собой массив, вам нужно сделать следующее:

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

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

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

outerList.innerList.Add(item)

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

var newList = new List<ItemType>();
newList.Add(item);
outerList.innerList = newList;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top