好的我有一个类似于以下的课程......
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 []。
缺少什么?
答案 0 :(得分:5)
我想我可能会遗漏一些东西,但newOrder.OrderItems.Add(newItem)
应该可以正常工作,根据你在帖子中的说法。
其他一些挑剔的事情:
如果只是单个项目,“Items”类的复数很奇怪。这可能是将单个项目分配给List属性看起来“ok”的原因。
您可能已将其从帖子中删除,但是WCF序列化的每个类都必须标记为“DataContract”,而不仅仅是该类的成员。
在初始化这样的对象时,我认为使用Type Initializers会更加清晰:
var NewOrder = new ACME.Order{
ID = xxx,
OrderItems = new List<ACME.Item>
{
new ACME.Item{
ItemName = xxx
}
}
};
答案 1 :(得分:0)
你应该可以这样做:
newOrder.OrderItems.Add(newItem);
如果你的newItems []是一个数组,你需要这样做:
newOrder.OrderItems.AddRange(newItem.ToList<Items>());
答案 2 :(得分:0)
您已将newItems
声明为ACME.Items
类型,但OrderItems
类的Order
属性为List<Items>
。这些类型不能直接从一个类型分配给另一个类型。因此,newOrder.OrderItems = newItems
的分配就像试图说List<Items> = Items
一样。根据您在上面列出的课程,这是不可能的。相反,您需要添加到列表中。
答案 3 :(得分:0)
您所拥有的是Order.OrderItems
属性中的添加功能:
newOrder.OrderItems.Add(newItem);
您甚至可以向OrderItems添加整个项目列表:
var someList = new List<Items>();
//populate someList here
newOrder.OrderItems.AddRange(someList);
答案 4 :(得分:0)
如果列表中有列表,并且缺少Add()方法,则解决方法是创建新列表,添加项目,然后将内部列表设置为新列表。而不是:
outerList.innerList.Add(item)
.. ..使用
var newList = new List<ItemType>();
newList.Add(item);
outerList.innerList = newList;