我从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?
答案 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();
};