0

我从 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?

4

3 回答 3

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);
    }
}
于 2012-08-03T08:24:21.330 回答
1

如果您有多个语句,则必须使用大括号

AddNumber method = r => 
{
    Console.WriteLine(r + r);
    Console.Read();
};
于 2012-08-03T08:23:02.357 回答
0

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

AddNumber method = r => 
                 {
                       Console.WriteLine(r + r);
                       Console.Read();
                 };
于 2012-08-03T08:29:14.567 回答