【发布时间】:2021-12-05 17:50:17
【问题描述】:
我需要在 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 的泛型和非泛型方法是否有缺点?
【问题讨论】:
-
无法评价利弊。我会简单地实现两者。一个很好的例子是标准的 StringComparer。它实现了几乎所有的比较器接口。见referencesource.microsoft.com/#mscorlib/system/…
标签: c# wpf datagrid adapter icomparer