Добавление элемента списка в другой список
-
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;