为什么c#中的lambdas似乎以不同的方式处理布尔返回值?

Mic*_*ett 6 c# lambda

考虑这段代码:

Func<int, bool> TestGreaterThanOne = delegate(int a) {
                 if (a > 1) return (true);
                 else return(false);
                 };
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,我无法删除"else return(false)"语句 - 编译器警告并非所有代码路径都返回一个值.但是在下面的代码中,使用了lambda ...

Func<int, bool> TestGreaterThanOne = a => a > 1;
Run Code Online (Sandbox Code Playgroud)

我没有"else"语句 - 没有编译器警告,逻辑按预期工作.

这里有什么机制可以让我在lambda中没有"else"语句?

Ray*_*hen 21

因为在你的lambda速记中,也没有if语句.你的lambda速记相当于

Func<int, bool> TestGreaterThanOne = delegate(int a) { 
             return (a > 1);
             }; 
Run Code Online (Sandbox Code Playgroud)

因此,所有代码路径都返回一个值.