我有以下课程......
public class Order
{
private Guid id;
public Guid ID
{
get { return id; }
set { id = value; }
}
private List<Items> orderItems;
public List<Items> OrderItems
{
get { return orderItems; }
set { orderItems= value; }
}
}
public class Item
{
private Guid id;
public Guid ID
{
get { return id; }
set { id = value; }
}
private string itemName;
public string ItemName
{
get { return itemName; }
set { itemName = value; }
}
}
然后在我的应用程序中,我尝试以下....
ACME.Order newOrder = new ACME.Order();
newOrder.ID = xxx
newOrder.OrderItems = new List<OrderItem> {
new ACME.OrderItem {
ID = xxx
ItemName = xxx
}
}
但是我收到错误“无法将类型'System.Collections.Generic.List<ACME.Item>'
隐式转换为ACME.Item[]
。奇怪的是,我的任何列表对象都没有”添加“选项。
答案 0 :(得分:1)
您的应用程序是否位于Web服务的客户端?
如果是这样,.asmx和WCF Web服务的代理生成器在客户端生成数组T[]
,其中服务接口使用List<T>
(或者实际上,任何其他枚举类型)。
您的应用程序需要将列表转换为数组(使用.ToArray()
)来设置数组属性客户端。
答案 1 :(得分:0)
我假设 List<Items>
是拼写错误,你的意思是List<Item>
?是OrderItem : Item
?或者这是另一个错字?
我假设OrderItem : Item
...
使用public List<Item> OrderItems {...}
,必须是List<Item>
:
newOrder.OrderItems = new List<Item> {
new ACME.OrderItem {
id = xxx
}
}
因为列表不协变,即使在4.0
中也是如此答案 2 :(得分:0)
忽略拼写错误我建议您将订单上的通用列表转为自动初始化。然后,您只需要直接处理列表,而不必担心添加项目时的初始化。如下所示:
public class Order
{
public Guid ID { get; set; }
private List<Item> orderItems;
public List<Item> OrderItems
{
get
{
if (orderItems == null)
orderItems = new List<Item>();
return orderItems;
}
}
}
public class Item
{
public Guid ID { get; set; }
public string ItemName { get; set; }
}
然后在您的应用程序中,您将执行以下操作:
Order newOrder = new Order { ID = new Guid() };
newOrder.OrderItems.Add( new Item() { ID = new Guid(), ItemName = "New Item"});
答案 3 :(得分:0)
newOrder.OrderItems = new List<OrderItem> {
new ACME.OrderItem {
ID = xxx
ItemName = xxx
}
忽略您的拼写错误,您的新列表应该像
一样创建newOrder.OrderItems = new List<OrderItem>() { new OrderItem { IX=1,Itemname="somename}}
我看到你在new List<OrderItem>
HTH