繁体   English   中英

FUNC <int,bool> Linq中没有return关键字?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM