【发布时间】:2014-09-16 14:50:48
【问题描述】:
我写了以下代码:
int n1 = 5
Task<int> myTask = new Task<int>(n1 => lib.MultiplyNumberTimes2(n1));
myTask.Wait();
Console.WriteLine("Result is " + myTask.Result.ToString());
我想要它做什么的代码解释:
我希望这会创建一个名为 myTask 的新任务,该任务将接受一个 n1 int 变量,并使用它运行 lib.MultipleNumerTimes2 方法。然后在等待它完成后,我会使用 myTask.Result 语句在屏幕上打印任务结果。
但 Visual Studio 在我上面的代码的第 2 行显示错误,在 goto 运算符 (=>) 之前的 n1 下划线:
不能在此上下文中声明名为“n1”的局部变量,因为它会赋予“n1”不同的含义,后者已在“父或当前”范围内用于表示其他内容
我猜这是我的 lambda 表达式 sintax 中的一个错误,我还无法理解。 lambda 表达式不是声明为:parameters => expression 吗?我知道我正在声明一个匿名表达式,我不想给它一个 int 变量,然后通过 => 运算符使用相同的变量来运行一个函数,但 Visual Studio 认为我正在尝试声明一个新的 n1变量,而实际上我只想将其用作参数。此外,在弄乱代码的同时,我注意到更改了第 2 行来修复它:
Task<int> myTask = new Task<int>(() => lib.MultiplyNumerTimes2(n1));
我知道我可以这样,但我想知道我的 lambda 表达式有什么问题,它不会让我向它发送任何参数
【问题讨论】:
标签: c# lambda task anonymous-methods