我需要在 WPF DataGrid 的 ListCollectionView 上使用自定義排序演算法。IComparer<string>因為我使用字串,所以我創建了一個實作,但CustomSort屬性ListCollectionView 只采用非通用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 介面,該介面將呼叫通用比較方法。
哪種解決方案更可取,為什么?配接器會是一個無用的額外組件嗎?實作 IComparer 的泛型和非泛型方法是否有缺點?
uj5u.com熱心網友回復:
我發現少即是多。實作最低限度并僅在需要時添加。
翻譯到你的情況,這取決于......
您是否看到自己在任何地方(在您的視圖模型中)使用泛型變體?
不
CollectionView 本質上是基于物件的。僅實作 IComparer 就足夠了。
是的
在MyComparer. 我只在需要進行一些預處理或后處理時使用配接器/裝飾器模式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/330492.html
