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

缺少什么?

4

5 回答 5

5

我想我可能会遗漏一些东西,但newOrder.OrderItems.Add(newItem)应该可以正常工作,根据您在帖子中的内容。

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

“Items”类的复数形式很奇怪,如果它只是一个项目的话。这可能是将单个项目分配给 List 属性看起来“不错”的原因。

您可能已将其从帖子中删除,但 WCF 序列化的每个类都必须标记为“DataContract”,而不仅仅是该类的成员。

在像这样初始化对象时,我认为使用Type Initializers会更清晰:

var NewOrder = new ACME.Order{
     ID = xxx,
     OrderItems = new List<ACME.Item>
     {
          new ACME.Item{
               ItemName = xxx
          }
     }
};
于 2009-12-04T05:26:00.343 回答
0

你应该能够做到:

newOrder.OrderItems.Add(newItem);

如果你的 newItems[] 是一个数组,你需要这样做:

newOrder.OrderItems.AddRange(newItem.ToList<Items>());
于 2009-12-04T05:18:41.633 回答
0

您已声明newItemsACME.Items类型,但OrderItems您的类的属性Order是 a List<Items>。这些类型不能直接从一种分配给另一种。因此,分配 ofnewOrder.OrderItems = newItems就像试图说List<Items> = Items. 根据您上面概述的课程,这是不可能的。相反,您需要添加到列表中。

于 2009-12-04T05:19:07.093 回答
0

您所拥有的是您的Order.OrderItems财产中的添加功能:

newOrder.OrderItems.Add(newItem);

您甚至可以将整个项目列表添加到您的 OrderItems:

var someList = new List<Items>();
//populate someList here
newOrder.OrderItems.AddRange(someList);
于 2009-12-04T05:20:43.987 回答
0

如果列表中有一个列表,并且缺少 Add() 方法,解决方法是创建一个新列表,添加项目,然后将内部列表设置为新列表。代替:

outerList.innerList.Add(item)

..采用..

var newList = new List<ItemType>();
newList.Add(item);
outerList.innerList = newList;
于 2015-05-15T14:41:54.197 回答