适配器类或 IComparer <T>的多接口实现



我需要在WPF DataGrid的ListCollectionView上使用自定义排序算法。我创建了IComparer<string>的实现,因为我使用字符串,但ListCollectionViewCustomSort属性只需要非通用的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上实现这两个。我只在需要进行一些预处理或后处理时才使用适配器/装饰器模式。

最新更新