2009-12-04 4 views
2

Ok У меня есть класс, подобный следующему ...Добавление элемента списка в другой список

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; } 
    } 

} 

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

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

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

Просто некоторые другие придираться вещи:

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

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

При инициализации объектов, как это, я думаю, что это делает его намного cleaer использовать Type Initializers:

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

+1 за собирание на странной плюрализации ... – kiwipom

+0

Большой пункт о плюрализации, я, безусловно, сделать это изменение. Также у меня есть данные datacontract, которые я просто вырезал, как вы сказали, чтобы этот пример был чистым. Однако моя проблема в том, что у меня нет функции Add, доступной мне в intelisense. Все, что у меня есть, это такие вещи, как Any <>, Aggregate <> и т. Д., Что заставляет меня думать, что я что-то упускаю, но я не уверен, что. – Kuruption

+0

никогда не получил его. Благодарю. – Kuruption

0

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

newOrder.OrderItems.Add(newItem); 

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

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

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

0

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

newOrder.OrderItems.Add(newItem); 

вы даже можете добавить целый список элементов для вашего ТоварыЗаказа:

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

Когда у вас есть список внутри списка и добавления() метод отсутствует, временное решение чтобы создать новый список, добавить элементы, а затем установить внутренний список в новый список. Вместо:

outerList.innerList.Add(item) 

..use .. ввод ..

var newList = new List<ItemType>(); 
newList.Add(item); 
outerList.innerList = newList;