我有BindingList<BaseClass>
变量。然后我想将它赋值给BindingList,但得到的错误不能转换...有可能吗?
BindingList<BaseClass> base;
...
BindingList<ChildClass> child = new BindingList<ChildClass>();
...
base = child;
最后一行给出的错误是无法将一种类型转换为另一种类型。我知道列表最终是不同的类型,然而,从我的角度来看,列表类型可以因为继承而强制转换。
发布于 2014-07-24 19:32:36
从我的角度来看,由于继承,列表类型可以进行强制转换
不,他们不能-以此为例:
List<Fruit> base;
List<Apple> apples = new List<Apple>();
base = apples;
// if that were legal, then this could happen:
base.Add(new Orange()); // fail because a list of apples can't store an orange.
您可以将这些项目转换为新列表:
base = child.Cast<BaseClass>().ToList();
现在,base
是一个单独的列表,可以包含BaseClass
的任何实例。
发布于 2014-07-24 19:29:11
您在这里看到的是.Net中的泛型缺乏差异。它是设计出来的。
基本上,这是为了防止您执行以下操作:
List<Giraff> giraffs = new List<Giraff>();
List<Animal> animals = giraffs;
您代码中的某个位置存在...then
animals.Add(new Horse()); //run-time error
基本上,该检查阻止您在运行时执行此操作,并防止您在编译时执行此操作。有趣的是,这并不适用于数组。但那是另一回事了..。
这里有一个关于它的MSDN article。
发布于 2014-07-24 19:31:07
如果您有一个BindingList<BaseClass>
,您将能够向列表中添加ChildClass
和AnotherChildClass
类型的项。这对于BindingList<ChildClass>
是无效的,因此您不能将后者分配给前者。
https://stackoverflow.com/questions/24942340
复制