我需要在WPF DataGrid的ListCollectionView上使用自定义排序算法。我创建了IComparer<string>
的实现,因为我使用字符串,但ListCollectionView
的CustomSort
属性只需要非通用的IComparer
实现:
listCollectionView.CustomSort = new MyComparer(); // this wont work
因为我的比较逻辑是专门为字符串,而我需要一个IComparer
实例,我正在考虑创建一个MyComparerAdapter
适配器,像这样:
public class MyComparerAdapter : IComparer
{
private readonly IComparer<string> _innerComparer = new MyComparer();
public int Compare(object a, object b)
{
return _innerComparer.Compare((string)a, (string)b);
}
}
但是我不妨在MyComparer
类中实现非泛型IComparer接口,它将调用泛型Compare方法。
哪个解决方案更可取,为什么?适配器会是一个无用的额外组件吗?实现IComparer的泛型和非泛型方法是否有缺点?
我觉得少即是多。实现最小值,只在需要时添加。
翻译成你的情况,这取决于…
您是否看到自己使用通用变体任何地方(在你的视图模型中)?
没有CollectionView本质上是基于对象的。只实现IComparer就足够了。
对
在MyComparer
上实现这两个。我只在需要进行一些预处理或后处理时才使用适配器/装饰器模式。