具有值实现接口的字典的扩展方法
Extension method for dictionary with value implementing interface
我正在尝试为所有字典实现一个扩展方法,这些字典的值属于实现特定接口的类型。
在这种情况下,我想要一个 returns
的 ToListSortedByValue() 方法
List<KeyValuePair<string, IComparable>>
对于任何类型的字典
Dictionary<string, IComparable>
那会很酷,因为它允许我使用字典而不是列表,但能够在需要时对它们进行排序(例如,在文件中或在控制台打印时)。
这是我尝试过的方法,但它不起作用,知道为什么吗?
public static List<KeyValuePair<string, IComparable>> ToListSortedByValue(this Dictionary<string, IComparable> Dic)
{
return Dic.OrderBy(x => x.Value).ToList();
}
编辑:
它已经解决了,但为了完整起见,这是我遇到的问题:
尝试使用该方法时出现错误,就好像这种方法不存在一样。如果我使用实际的可比较类型而不是 IComparable,比方说 int 或实现 IComparable 的 class,那么它将起作用。
您需要使您的方法通用,以便它扩展您的实际类型而不仅仅是 IComparable
:
public static List<KeyValuePair<string, T>> ToListSortedByValue<T>(this Dictionary<string, T> Dic) where T : IComparable<T>
基本上你需要使方法在值类型上通用,然后将该类型约束为 IComparable<T>
.
public static List<KeyValuePair<string, T>> ToListSortedByValue<T>(
this Dictionary<string, T> Dic) where T : IComparable<T>
{
return Dic.OrderBy(x => x.Value).ToList();
}
这有一个额外的好处,即返回传入类型的值。您甚至可能还想使密钥类型通用,因此它不仅限于 string
public static List<KeyValuePair<TKey, TValue>> ToListSortedByValue<TKey, TValue>(
this Dictionary<TKey, TValue> Dic) where TValue : IComparable<TValue>
{
return Dic.OrderBy(x => x.Value).ToList();
}
我正在尝试为所有字典实现一个扩展方法,这些字典的值属于实现特定接口的类型。 在这种情况下,我想要一个 returns
的 ToListSortedByValue() 方法List<KeyValuePair<string, IComparable>>
对于任何类型的字典
Dictionary<string, IComparable>
那会很酷,因为它允许我使用字典而不是列表,但能够在需要时对它们进行排序(例如,在文件中或在控制台打印时)。
这是我尝试过的方法,但它不起作用,知道为什么吗?
public static List<KeyValuePair<string, IComparable>> ToListSortedByValue(this Dictionary<string, IComparable> Dic)
{
return Dic.OrderBy(x => x.Value).ToList();
}
编辑: 它已经解决了,但为了完整起见,这是我遇到的问题: 尝试使用该方法时出现错误,就好像这种方法不存在一样。如果我使用实际的可比较类型而不是 IComparable,比方说 int 或实现 IComparable 的 class,那么它将起作用。
您需要使您的方法通用,以便它扩展您的实际类型而不仅仅是 IComparable
:
public static List<KeyValuePair<string, T>> ToListSortedByValue<T>(this Dictionary<string, T> Dic) where T : IComparable<T>
基本上你需要使方法在值类型上通用,然后将该类型约束为 IComparable<T>
.
public static List<KeyValuePair<string, T>> ToListSortedByValue<T>(
this Dictionary<string, T> Dic) where T : IComparable<T>
{
return Dic.OrderBy(x => x.Value).ToList();
}
这有一个额外的好处,即返回传入类型的值。您甚至可能还想使密钥类型通用,因此它不仅限于 string
public static List<KeyValuePair<TKey, TValue>> ToListSortedByValue<TKey, TValue>(
this Dictionary<TKey, TValue> Dic) where TValue : IComparable<TValue>
{
return Dic.OrderBy(x => x.Value).ToList();
}