位置:首页 > 软件操作教程 > 编程开发 > C# > 问题详情

C# Lambda表达式的语句体

提问人:刘团圆发布时间:2020-12-08

    在前面的所有代码中,Lambda表达式的语句体都只使用了一个表达式。我们还说明了这个表达式如何解释为Lambda表达式的返回值,例如,如何给返回类型为int的委托使用表达式paramA+ paramB作为Lambda表达式的语句体(假定paramA和paramB隐式或显式类型化为int值,如示例代码所示)。

    前一个示例说明了对于语句体中使用的代码而言,返回类型为void的委托的要求并不高:

    myTimer.Elapsed += (source,e) => WriteLine("Event handler called after " + $"{{source as Timer).Interval} milliseconds.");

    上面的语句不返回任何值,所以它只是执行,其返回值不在任何地方使用。

    可将Lambda表达式看成匿名方法语法的扩展,所以还可以在Lambda表达式的语句体中包含多个语句。为此,只需要把代码块放在花括号中,类似于C#中提供多行代码的其他情况:

(paraml/ param2)=>

{

    // Multiple statements ahoy!

}

如果使用Lambda表达式和返回类型不是void的委托类型,就必须用return关键字返回一个值,这与其他方法一样:

(paraml, param2)=>

{

    // Multiple statements ahoy!

    return returnValue;

}

例如,可将前面示例中的如下代码:

    PerformOperations((paramA, paramB) => paramA + paramB);

改写为:

    PerformOperations(delegate(int paramA, int paramB)

      {

        return paramA + paramB;

    });

另外,也可以把代码改写为:

    PerformOperations ( (paramA, paramB)=>

      {

        return paramA + paramB;

      });

这更像是原来的代码,因为它保持了paramA和paramB参数的隐式类型化。

大多数情况下,在使用单一表达式时,Lambda表达式最有用,也最简洁。坦率地讲,如果需要多个语句,则定义一个单独的非匿名方法来替代Lambda表达式比较好,这也会使代码更便于重用。

继续查找其他问题的答案?

相关视频回答
回复(0)
返回顶部