题
确定我具有类似于下面的一类...
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;
不隶属于 StackOverflow