2015-10-20 58 views
0

如果类类型列表中有一个名为2泛型列表分配

Collection<PurchaseOrderDetail> poDetails = new Collection<PurchaseOrderDetail>(); 

,并与同类型的另一个列表是有一个名为_poH.PODetail

为什么_poH.PODetail = poDetails.ToList();产生

无法隐式转换类型错误'System.Collections.Generic.List' to'System.Collections.ObjectModel.Collection'

什么是这个解决方案,请任何解释。

所有的问题背后的原因是

_poH.PODetail = poDetails; 

做出poDetails.RemoveAt(Convert.ToInt32(e.RowIndex));更新以及所以我)寻找像_poH.PODetail = poDetails.ToCollection一些事情(;

+2

因为'Collection'不是基输入'List' –

+0

继续编辑:这是因为'Collection '是一个引用类型,就像大多数类型都在.NET中一样。任何使用这种类型的变量或类型成员实际上都是指向一个实例。这意味着除非'PurchaseOrderDetail'是一个'struct'(它是值类型),否则你在一个属性中改变的任何属性都将反映在它所在的任何集合中,即使存在许多实际实例甚至种类集合。 – Crono

回答

1

根据错误消息,_poH.PODetail的类型为Collection,因此为其分配列表不起作用。但由于poDetails是一家集本身,你可以直接给它分配:

poH.PODetail = poDetails; 

所以你实际上并不需要调用它ToList()将其转换为一个列表。


没有ToCollection方法,你可以在枚举接口调用,但是你可以使用Collection constructor that takes a list使其包装列表并且创造一个只读集合:

new Collection(poDetails.ToList()); 
+0

@@ poke我只是在寻找一个ToCollection()方法,但没有。我知道poH.PODetail = poDetails;这是有效的 – Sanjeewa

+0

@Sanjeewa如果你选择直接分配集合,你必须记住'Collection '是一个引用类型。这意味着该集合不会被“复制”,它将是相同的。在“poDetails”或“_poH.PODetails”中添加/删除将反映在其他收集变量上。这可能不是你想要的,这取决于你的情况。 – Crono

0

简短的回答只不过是ToList<T>扩展返回List<T>类的一个实例,尽管类似,它与Collection<T>不同。

基本上这不起作用的原因是你不能将字符串值设置为整数变量。

有一件事你可以做,虽然,正在初始化一个新的集合实例的内容与IList<T>实例。因此,下面的应该给你你想要什么:

_poH.PODetail = new Collection(poDetails.ToList()); 

而且,捅建议,你可能还需要指定PODetail属性与poDetails变量本身。

_poH.PODetail = poDetails; 

但是,您必须记住Collection<T>是引用类型。这意味着集合中的对象将不会被“复制”到_poH.PODetail;相反,poDetails_poH.PODetail将指向完全相同的集合。对一个集合所做的任何更改都会自动反映在另一个集合上。

+0

@@ Crono是的,你的观点很好理解 – Sanjeewa