如果类型列表名为
Collection<PurchaseOrderDetail> poDetails = new Collection<PurchaseOrderDetail>();
和另一个具有相同类型的列表名为_poH.PODetail
为什么_poH.PODetail = poDetails.ToList();
会产生错误
无法隐式转换类型&#39; System.Collections.Generic.List&#39; 到&#39; System.Collections.ObjectModel.Collection&#39;
对此有什么解决方案,请解释。
问题背后的所有原因是
_poH.PODetail = poDetails;
也发了poDetails.RemoveAt(Convert.ToInt32(e.RowIndex));
次更新,所以我在寻找像_poH.PODetail = poDetails.ToCollection();
答案 0 :(得分:1)
根据错误消息,_poH.PODetail
的类型为Collection
,因此为其分配列表不起作用。但由于poDetails
本身就是一个集合,你可以直接分配它:
poH.PODetail = poDetails;
因此,您实际上不需要在其上调用ToList()
将其转换为列表。
您可以在枚举上调用ToCollection
方法,但您可以使用Collection
constructor that takes a list来包装该列表并创建只读集合:
new Collection(poDetails.ToList());
答案 1 :(得分:0)
简短的回答只是ToList<T>
扩展名返回List<T>
类的实例,虽然类似,但与Collection<T>
的类型不同。
基本上这不起作用的原因与您无法将字符串值设置为整数变量的原因相同。
您可以做的一件事是使用IList<T>
实例初始化新集合实例的内容。因此,以下内容应该为您提供您想要的内容:
_poH.PODetail = new Collection(poDetails.ToList());
另外,正如poke建议的那样,您可能还想为PODetail
属性分配poDetails
变量本身。
_poH.PODetail = poDetails;
但是,您必须记住Collection<T>
是引用类型。这意味着您的集合中的对象不会被_poH.PODetail
内的“复制”;相反,poDetails
和_poH.PODetail
都将指向完全相同的集合。对一个集合所做的任何更改都将自动反映在另一个集合中。