[英]Func<int,bool> without return keyword in Linq?
使用Linq时我偶然发现了以下表达式:
bool biggerThan10Exists = numbers.Any(n => n > 10);
Any的定义如下:
public static bool Any<TSource>(
this IEnumerable<TSource> source,
Func<TSource, bool> predicate
)
Func的定义如下:
public delegate TResult Func<in T, out TResult>(
T arg
)
因此,如果Any需要一个Func ,它需要传递一个返回 int的委托,那我怎么能传递一个lambda表达式,在我看来是一个void委托的定义,即
n => n > 10
虽然我期待
n => return n > 10
我很确定我明显错过了什么,但是什么?
这种类型的lambda表达式称为表达式lambda :
n => n > 10
在表达式lambdas中,以下内容=>
必须是一个表达式,并且返回类型由编译器推断。 其中一个后果是您不能使用表达式lambda语法来创建具有void
返回类型的lambda。
lambda有另一种语法,称为语句lambda :
n => { return n > 10; }
这里=>
后跟一个包含一个或多个语句的块; 如果你想返回一个值,你必须明确地这样做,并且也可以有一个void
返回类型(不要返回任何东西)。
请注意,语句lambdas的支持仅在.NET 4.0中添加,并且在整个框架中通常比表达式lambdas更糟糕,例如,许多(所有?)LINQ查询提供程序将拒绝使用语句lambdas,即使它们可以是简单的写作等效表达式lambda。
n > 10
是一个返回布尔值的表达式。
所以n => n > 10
表示,取n
并且如果它大于10则返回true,否则返回false ...
这里的回报也是隐含的。 你也可以像这样写:
n => { return n > 10; }
这对于:
n => {
if (n > 10)
return true;
return false;
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.