2009-12-04 69 views
2

好吧,我有類似以下的一類...添加另一個列表內的列表項

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

我想我可能會丟失東西,但newOrder.OrderItems.Add(newItem)應該工作得很好,根據你在你的帖子。

只是一些其他的東西挑剔:

的「項」級的多元化是奇怪的,如果它只是一個單一的項目。這可能是它看起來「確定」將單個項目分配給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 2009-12-04 05:30:27

+0

偉大的觀點關於複數化,我一定會做出這種改變。另外,我還有一些數據合同信息,我只是按照你所說的保持例子的清潔。 但是我的問題是我沒有在intelisense中提供給我的Add函數。我所有的東西都是像Any <>,Aggregate <>等等,這使我相信我錯過了一些東西,但我不知道是什麼。 – Kuruption 2009-12-05 12:36:10

+0

沒什麼好說的。謝謝。 – Kuruption 2009-12-05 13:33:40

0

你應該能夠做到:

newOrder.OrderItems.Add(newItem); 

如果您newItems []是一個數組,你需要做的是:

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

您已經聲明newItems作爲ACME.Items類型,但Order類的OrderItems財產是List<Items>。這些類型不能直接從一個指派給另一個。所以,newOrder.OrderItems = newItems的任務就像試圖說List<Items> = Items。根據上面列出的類別,這是不可能的。相反,您需要添加到列表中。

0

你有什麼是一個附加功能,在您的Order.OrderItems屬性:

newOrder.OrderItems.Add(newItem); 

您可以將項目的整個列表,甚至添加到您的OrderItems:

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

當你有一個列表中的列表,而Add()方法缺失,解決方法是創建一個新列表,添加項目,然後將內部列表設置爲新列表。代替:

outerList.innerList.Add(item) 

..使用..

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