有没有办法直接将变量传递给 lambda 方法?
例如
string s = "test";
new Thread(() => MessageBox.Show(s)).Start();
Lambda 表达式真的让我的生活变得如此轻松,为什么从外界传入一个变量看起来如此复杂?
它并不复杂,特别是如果您使用方法组语法:
new Thread(MessageBox.Show).Start("test");
嗨,参数化线程编写代码如下
string a = "test";
new Thread((s) => { s = "newTest"; }).Start(a);
如何用 1 个分号完成此操作?
有什么问题?
new Thread(() => MessageBox.Show("test")).Start();
更新。
将某些东西传递给 lambda 的最简单方法是闭包(这就是您的问题的外观)。这就是为什么它们如此方便。通过传递此处所示的参数,您正在破坏 lambdas 的所有首选项。从下一个关于传递两个或多个参数的问题中,您应该清楚这一点。
使用闭包,您可以轻松地做到这一点:
// somewhere in the code
var owner = // ...
var text = // ...
var caption = // ...
// here's the closures:
new Thread(() => MessageBox.Show(owner, text, caption)).Start();
没有它们,您需要获取(或制作)某种类型,这将是您的参数的容器,创建该类型的实例并初始化它的成员。事实上,当您使用闭包时,这是编译器为您所做的工作。那么,为什么要阻止编译器完成所有这些肮脏的工作呢?
Lambda 表达式可以采用如下参数:
(string s) => MessageBox.Show(s);
这将更改操作的定义,因此接受 lambda 的方法需要能够接受新的委托。
更多解释请参见msdn 文档。