【发布时间】:2015-06-15 19:18:58
【问题描述】:
关于以下扩展方法:
public static class Extensions
{
public static void P<T>(this T value) { }
public static TResult F<T, TResult>(this T value)
{
return default(TResult);
}
}
当我尝试将这些与各种类型参数选项一起使用时,我得到以下结果:
1.P(); // Compiler just fine
1.P<int>(); // R# says "Type argument specification is redundant"
var x = 1.F<int, int>(); // Compiler just fine
var y = 1.F<int>(); // Compiler error: Incorrect number of type parameters
那么为什么编译器可以为P 推断出T 的类型,却不能为F 推断出相同的类型?这种推断的规则是什么?有没有办法可以避免指定这样的类型?
【问题讨论】:
-
this T value是您传递的任何类型。 -->1.P<int>();-->1已经是整数了 -
@T.S.,是的,我明白了。我不明白为什么这不适用于
1.F。为什么int被推断为P而不是F? -
你在
F中遇到了完全不同的问题——它是一个通用函数,没有映射就无法推断 -
@T.S.,我同意。我应该删除它,还是等待它关闭(我已经投票了;)?
-
我不知道。我不是那么专业。可能会删除。
标签: c#