c#方法参数中的有界泛型
本文关键字:泛型 方法 参数 | 更新日期: 2023-09-27 18:02:14
问题: c#在方法参数中支持有界泛型吗?如果是,语法是什么?
Context:我正在编写一个实用程序方法,对字典中的值进行Dictionary
排序。因此,Dictionary
中的值必须实现IComparable
接口。
尝试(s):下面的代码获取Dictionary
,获取KeyValuePair
的列表,对Value
进行排序,然后根据它们的值返回字典中的顶级键。
private string[] getTopWords<T , U>(Dictionary<T, U> similarWordsAndWeights)
{
var myList = similarWordsAndWeights.ToList();
myList.Sort((firstPair, nextPair) =>
{
return -firstPair.Value.CompareTo(nextPair.Value);
}
);
var dictionary = myList.ToDictionary((keyItem) => keyItem.Key, (valueItem) => valueItem.Value);
return createStringArrayFromGenericList(dictionary.Keys.ToList().GetRange(0, 10));
}
然而,这段代码不会编译,因为U
不"保证"实现IComparable
。语法private string[] getTopWords<T, U : IComparable>
也不能编译。
我可以输入check,看看我的U
实现了IComparable
,但我宁愿不。
所以在写完我的问题后不久,我在MSDN上找到了一篇关于泛型的文章,我已经通过了,但是在页面的一半,我找到了我正在寻找的答案。下面是解决方案的代码:
private string[] getTopWords<T , U>(Dictionary<T, U> similarWordsAndWeights) where U : IComparable
{
var myList = similarWordsAndWeights.ToList();
myList.Sort((firstPair, nextPair) =>
{
return -firstPair.Value.CompareTo(nextPair.Value);
}
);
var dictionary = myList.ToDictionary((keyItem) => keyItem.Key, (valueItem) => valueItem.Value);
return createStringArrayFromGenericList(dictionary.Keys.ToList().GetRange(0, NUMBER_OF_WORDS_TO_RETURN));
}
看起来你在参数之后做了边界声明。我之前一直在寻找一些东西(有Java背景),当然没有找到任何东西。一个人只用几分钟的时间就能在谷歌上做很多事情,真是太神奇了。
我认为分享我的解决方案是明智的,因为我无法在SO上找到任何具体的东西,它可能对其他人最终搜索相同的东西有所帮助。