Lambda表达式中的多个句子

时间:2012-08-03 08:19:57

标签: c# lambda

我从Lambda表达式开始,了解如何使用它来定义匿名方法。

我有以下简单的代码:

delegate void AddNumber(int number);
class LambdaExpressionSample
{
   static void Main(string[] args)
   {
      AddNumber method = r => Console.WriteLine(r + r);Console.Read();
      method(1);
   }
}

我想要的是该方法与此相同:

AddNumber method = new AddNumber(delegate(int number) 
{ 
   Console.WriteLine(number+number); 
   Console.Read(); 
});

但是带有lambda表达式的代码无法正常工作,因为lambda表达式显然以分号“;”结束。在Console.WriteLine之后。

如何使用我的lambda示例让我的方法执行Console.WriteLine和Console.Read?

3 个答案:

答案 0 :(得分:2)

您可以简单地将代码包装在大括号之间:

delegate void AddNumber(int number);
class LambdaExpressionSample
{
    static void Main(string[] args)
    {
        AddNumber method = r =>
        {
            Console.WriteLine(r + r);
            Console.Read();
        };
        method(1);
    }
}

Action封装了一个具有单个参数且不返回值的方法。因此,为了避免在代码中的任何地方使用自定义代理委托地狱,您应该使用:

Action<int> addNumber;

而不是:

delegate AddNumber(int number);

这里是您的新代码,包含更改:

class LambdaExpressionSample
{
    static Action<int> addNumber;
    static void Main(string[] args)
    {
        this.addNumber = r =>
        {
            Console.WriteLine(r + r);
            Console.Read();
        };
        this.addNumber(1);
    }
}

答案 1 :(得分:1)

如果你有一个以上的陈述,你必须使用大括号

AddNumber method = r => 
{
    Console.WriteLine(r + r);
    Console.Read();
};

答案 2 :(得分:0)

为多行代码添加花括号解决了您的问题

AddNumber method = r => 
                 {
                       Console.WriteLine(r + r);
                       Console.Read();
                 };