2通用列表分配

时间:2015-10-20 18:19:36

标签: c# generics

如果类型列表名为

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();

这样的东西

2 个答案:

答案 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都将指向完全相同的集合。对一个集合所做的任何更改都将自动反映在另一个集合中。