C# 无法隐式转换…列表
我有以下课程C# 无法隐式转换…列表,c#,.net,list,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 order
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; }
}
}
公共类秩序
{
私有Guid id;
公共Guid ID
{
获取{return id;}
设置{id=value;}
}
私人物品清单;
公共列表订购项目
{
获取{返回orderItems;}
设置{orderItems=value;}
}
}
公共类项目
{
私有Guid id;
公共Guid ID
{
获取{return id;}
设置{id=value;}
}
私有字符串itemName;
公共字符串ItemName
{
获取{return itemName;}
设置{itemName=value;}
}
}
然后,在我的应用程序中,我尝试以下
ACME.Order newOrder = new ACME.Order();
newOrder.ID = xxx
newOrder.OrderItems = new List<OrderItem> {
new ACME.OrderItem {
ID = xxx
ItemName = xxx
}
}
ACME.Order newOrder=new ACME.Order();
newOrder.ID=xxx
newOrder.OrderItems=新列表{
新ACME.OrderItem{
ID=xxx
ItemName=xxx
}
}
然而,我得到了一个错误“无法将type
'System.Collections.Generic.List'
隐式转换为ACME.Item[]
。奇怪的是,我的列表对象上都没有“Add”选项。你的应用程序是在Web服务的客户端吗
如果是这样,则.asmx和WCF Web服务的代理生成器在客户端生成一个数组T[]
,其中服务接口使用列表(或者,实际上,任何其他枚举类型)
您的应用程序将需要将列表强制转换为数组(使用.ToArray()
)以在客户端设置数组属性。我假设列表
是一个打字错误,您的意思是列表
?这是订单项目:项目
?还是另一个打字错误
我假设,OrderItem:Item
对于公共列表OrderItems{…}
,它必须是列表
:
newOrder.OrderItems=新列表{
新ACME.OrderItem{
id=xxx
}
}
由于列表是不可协变的,即使在4.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"});
newOrder.OrderItems=新列表{
新ACME.OrderItem{
ID=xxx
ItemName=xxx
}
忽略你的打字错误,你的新列表应该像
newOrder.OrderItems = new List<OrderItem>() { new OrderItem { IX=1,Itemname="somename}}
newOrder.OrderItems=new List(){new OrderItem{IX=1,Itemname=“somename}}
我看到你在新列表
HTH您有一个公共列表OrderItems
属性,并尝试用新列表加载它。只是一个输入错误?您的类和变量名称都搞乱了->您有一个类项,但有一个列表,然后在您的应用程序中创建了一个列表,其他地方没有提到它是一个类…很好的地方-还需要注意的是用于svcutl.exe的列表
etc;/collectionType
,etcThanks刚刚从svcutil和所有works添加了集合类型行。
newOrder.OrderItems = new List<OrderItem> {
new ACME.OrderItem {
ID = xxx
ItemName = xxx
}
newOrder.OrderItems = new List<OrderItem>() { new OrderItem { IX=1,Itemname="somename}}