[英]Bounded Generic Types in Method Parameters C#
问题 :C#是否支持方法参数中的有界泛型类型? 如果是这样,语法是什么?
上下文 :我正在编写一个实用程序方法,对Dictionary
中的值进行字典排序。 因此, Dictionary
的值必须实现IComparable
接口。
尝试 :下面的代码采用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上找到任何具体内容,这可能对其他最终搜索相同内容的人有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.