假设我有一个方法来返回字典中的键列表,按其值排序:
/// Perhaps a wildly inefficient way to achieve this!
public static List<K> SortByValues<K,V>( Dictionary<K,V> items )
{
var keys = new K[items.Count];
var values = new V[items.Count];
var index = 0;
foreach( var kvp in items )
{
keys[index] = kvp.Key;
values[index++] = kvp.Value;
}
Array.Sort( values, keys );
return new List<K>( keys );
}
我想提供一个接受IComparer传递给Array.Sort
方法的重载。有没有办法在不重复所有代码的情况下执行此操作?理想情况下,有一种方法可以获得V型的“默认”比较器。
答案 0 :(得分:1)
喜欢Comparer<V>.Default
,也许?
您可以更改SortByValues
以获取IComparer<V>
参数,然后重载调用该方法传递Comparer<V>.Default
:
public static List<K> SortByValues<K,V>(Dictionary<K,V> items)
{
SortByValues(items, Comparer<K>.Default);
}
public static List<K> SortByValues<K,V>(Dictionary<K,V> items, IComparer<K> comparer)
{
var keys = new K[items.Count];
var values = new V[items.Count];
var index = 0;
foreach( var kvp in items )
{
keys[index] = kvp.Key;
values[index++] = kvp.Value;
}
Array.Sort( values, keys, comparer );
return new List<K>( keys );
}
答案 1 :(得分:0)
您似乎正在尝试找到获取给定通用参数IComparer<V>
的{{1}}的默认值的方法。如果是这样,那么您正在寻找V
属性(如果直接相等则为Comparer<T>.Default
)。
通过它,您可以使用以下模式来接受自定义比较器。
EqualityComparer<T>