将 ObservableCollection<child> 传递给采用 ObservableCollection<parent> 的函数
Passing an ObservableCollection<child> to a function that take ObservableCollection<parent>
所以我有一个
BaseClass
和几个从基类
继承的child 类
ChildClass1
ChildClass2
我有 ObservableCollections
个 child 类 需要就地排序,我无法创建新的 ObservableCollection<ChildClas1>
。
所以我写了一个函数
private void Reorder(ObservableCollection<BaseClass>)
{
//sort the collection in place
}
那我就Reorder(ObservableCollection<ChildClass1>)
编译器抱怨无法转换
System.Collections.ObjectModel.ObservableCollection<ChildClass1>
至 ObservableCollection<BaseClass>
我会相信编译器的话,但是我怎样才能做到这一点而不必为每个 child 类型复制我的重新排序函数?
I will take the compilers word for it
在 SO 上的许多问答中都讨论了为什么不能传递一种类型的集合来替代另一种类型的集合的原因 - 例如,here.
how can I achieve this without having to duplicate my reorder function for every single child type?
一种方法是使您的 Reorder
对集合元素的类型通用,并向类型参数添加约束以指定对象必须派生自您的基础 class:
void Reorder<T>(ObservableCollection<T> collection) where T : BaseClass {
...
}
所以我有一个
BaseClass
和几个从基类
继承的child 类ChildClass1
ChildClass2
我有 ObservableCollections
个 child 类 需要就地排序,我无法创建新的 ObservableCollection<ChildClas1>
。
所以我写了一个函数
private void Reorder(ObservableCollection<BaseClass>)
{
//sort the collection in place
}
那我就Reorder(ObservableCollection<ChildClass1>)
编译器抱怨无法转换
System.Collections.ObjectModel.ObservableCollection<ChildClass1>
至 ObservableCollection<BaseClass>
我会相信编译器的话,但是我怎样才能做到这一点而不必为每个 child 类型复制我的重新排序函数?
I will take the compilers word for it
在 SO 上的许多问答中都讨论了为什么不能传递一种类型的集合来替代另一种类型的集合的原因 - 例如,here.
how can I achieve this without having to duplicate my reorder function for every single child type?
一种方法是使您的 Reorder
对集合元素的类型通用,并向类型参数添加约束以指定对象必须派生自您的基础 class:
void Reorder<T>(ObservableCollection<T> collection) where T : BaseClass {
...
}