无法隐式转换...列表

时间:2009-12-08 12:14:26

标签: c# .net list

我有以下课程......

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[]。奇怪的是,我的任何列表对象都没有”添加“选项。

4 个答案:

答案 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