繁体   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