[英]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.