所以我有一个
BaseClass
以及从基类继承的几个子类
ChildClass1 ChildClass2
我有ObservableCollections
需要进行排序的子类,我无法创建新的ObservableCollection
.
所以我写了一个函数
private void Reorder(ObservableCollection) { //sort the collection in place }
那我呢 Reorder(ObservableCollection
编译器抱怨它无法转换
System.Collections.ObjectModel.ObservableCollection
为ObservableCollection
我将把编译器的内容用于它,但是如何在不必为每个子类型重复我的重新排序功能的情况下实现这一点?
我会用编译器的话来说明这一点
你不能传递一种类型的集合来代替另一种类型的集合的原因在SO上的许多问答中讨论 - 例如,在这里.
如何在不必为每个子类型重复我的重新排序功能的情况下实现此目的?
一种方法是Reorder
在collection元素的类型上创建泛型,并在type参数中添加一个约束,以指定对象必须从您的基类派生:
void Reorder(ObservableCollection collection) where T : BaseClass { ... }