我有BindingList<BaseClass>
变量。然后我想将它分配给BindingList但是得到无法转换的错误......是否可能?
BindingList<BaseClass> base;
...
BindingList<ChildClass> child = new BindingList<ChildClass>();
...
base = child;
最后一行给出了无法将一种类型转换为另一种类型的错误。我理解列表最终是不同的类型,但是,从我的角度来看,列表类型可以由于继承而被转换。
答案 0 :(得分:3)
从我的角度来看,列表类型可以由于继承而被转换
不,他们不能 - 举个例子:
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
的任何实例。
答案 1 :(得分:0)
你在这里看到的是.Net中的泛型缺乏差异。它是设计的。
基本上,这是为了阻止您执行以下操作:
List<Giraff> giraffs = new List<Giraff>();
List<Animal> animals = giraffs;
...然后代码中的某个地方
animals.Add(new Horse()); //run-time error
基本上,检查会阻止您在运行时执行此操作,并在编译时阻止此操作。有趣的是,阵列不是这样。但那是另一个故事......
以下是关于它的MSDN article。
答案 2 :(得分:0)
如果您有BindingList<BaseClass>
,则可以在列表中添加ChildClass
和AnotherChildClass
类型的项目。这对BindingList<ChildClass>
无效,因此您无法将后者分配给前者。