确定我具有类似于下面的一类...

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”,不只是类的成员。

在初始化像这样的对象,我觉得它使很多cleaer使用键入初始化器

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的任务就像是试图sayList<Items> = Items。这是不可能根据您上述的类。相反,你将需要添加到列表中。

当你有一个列表中的列表,而Add()方法缺失,一个解决方法是建立一个新的列表,添加的项目,然后设置内部列表到新名单。代替:

outerList.innerList.Add(item)

.. ..使用

var newList = new List<ItemType>();
newList.Add(item);
outerList.innerList = newList;
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top