簡體   English   中英

方法參數C#中的有界泛型類型

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM