当S和T不同时,这样做:
public static void Fun<S,T>(Func<S,T> func) { } Fun((string s) => true); //compiles,T is inferred from return type.
但,
public static void Fun<T>(Func<T,T> func) { } Fun(t => true); //can't infer type.
在第一个例子中,由于T是从lambda表达式的返回类型推断的,所以在第二个例子中也不能推断T?我想它的做法,但是为什么第一个T不知道,当第二个T的Func< T,T>知道了,毕竟T == T对吧?还是在Funcs的情况下推断类型的订单?
解决方法
它与S和T没有什么不同.它与您在第一种情况下提供正式参数类型相关,而在第二种情况下不提供它.
方法类型推断不会尝试从lambda中推断代理的返回类型,直到委托的形式参数类型已知为止.
在第二种情况下,您已经给编译器没有提供正式参数类型T,因此,lambda的主体甚至不会被分析.
What do you mean by “formal parameter type”?
形式参数是一个变量,它接受传递给方法,索引器,构造函数,lambda或匿名方法的参数的值. (或者,在out和ref格式参数的情况下,变为调用者提供的变量的别名.)正式参数是变量,因此具有类型.
委托代表R Func< A,R>(A a);具有类型A的形式参数a.使用方法类型参数来构造,以使得Func
方法fun的形式参数func相对应,因此func的形式参数类型是func=""
相关文章
转载注明原文:仅当S和T不同时,才能从lambda表达式的输出推断出Func的T? - 代码日志