请看以下最近的回答:
https://stackoverflow.com/a/36421418/1017882
总结一下,已经编写了一个使用泛型的扩展方法:
static TResult GetEntry<TEnum, TResult>(this Dictionary<TEnum, string> dictionary, TEnum key) {...}
在这种方式下,所有工作都正常:
var attributes = new Dictionary<MyTestEnum, string>();
var result = attributes.GetEntry<MyTestEnum, double>(MyTestEnum.First);
但是如果我以不同的方式调用它:
var result = attributes.GetEntry(MyTestEnum.First);
显然编译器不能再推断类型了。但是根据属性的内容很清楚,我试图传递的是什么类型。
为什么我必须明确传递的类型?这似乎是不必要的代码。
通常此类问题的答案会举出没有这种额外信息会导致错误的示例用法 - 但是我想不到任何这样的情况。
更多上下文
我之所以尝试在第一次中使用这个语法,是因为我(模糊地)记得可以在某些泛型使用中这样做。我想知道它如何应用于这样的集合。
TResult
?我认为返回类型不会参与泛型推断,所以string result = attributes.GetEntry(MyTestEnum.First)
也行不通。 - LeeTResult
是作为扩展参数的一部分传递的。 - user1017882