在另一个列表中添加列表项

Adding a list item within another list

提问人:Kuruption 提问时间:12/4/2009 最后编辑:jheddingsKuruption 更新时间:5/15/2015 访问量:9906

问:

好的,我有一个类似于以下的类......

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

缺少什么?

C# 列表 嵌套列表

评论


答:

0赞 Rashmi Pandit 12/4/2009 #1

您应该能够执行以下操作:

newOrder.OrderItems.Add(newItem);

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

newOrder.OrderItems.AddRange(newItem.ToList<Items>());
0赞 jheddings 12/4/2009 #2

您已声明为类型,但类的属性是 .这些类型不能从一个直接分配给另一个。所以,一个任务就像试图说。根据您上面概述的类,这是不可能的。相反,您需要添加到列表中。newItemsACME.ItemsOrderItemsOrderList<Items>newOrder.OrderItems = newItemsList<Items> = Items

0赞 Jon Limjap 12/4/2009 #3

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

newOrder.OrderItems.Add(newItem);

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

var someList = new List<Items>();
//populate someList here
newOrder.OrderItems.AddRange(someList);
5赞 Chris Pitman 12/4/2009 #4

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

只是其他一些吹毛求疵的事情:

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

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

在初始化这样的对象时,我认为使用类型初始值设定项会变得更加复杂:

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

评论

0赞 Kuruption 12/5/2009
关于复数的好点,我一定会做出改变。此外,我确实有数据合同信息,我只是按照您所说的将其剪掉以保持示例干净。但是,我的问题是我在 intelisense 中没有可用的添加功能。我所拥有的只是 Any<>、Aggregate 等东西<>这让我相信我错过了一些东西,但我不确定是什么。
0赞 Graham Laight 5/15/2015 #5

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

outerList.innerList.Add(item)

..用。。

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