仅当S和T不同时,才能从lambda表达式的输出推断出Func的T?

前端之家收集整理的这篇文章主要介绍了仅当S和T不同时,才能从lambda表达式的输出推断出Func的T?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
当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? - 代码日志

猜你在找的C#相关文章