0

有没有办法直接将变量传递给 lambda 方法?

例如

string s = "test";
new Thread(() => MessageBox.Show(s)).Start();

Lambda 表达式真的让我的生活变得如此轻松,为什么从外界传入一个变量看起来如此复杂?

4

5 回答 5

2

它并不复杂,特别是如果您使用方法组语法:

new Thread(MessageBox.Show).Start("test");
于 2013-06-06T06:28:41.933 回答
1

嗨,参数化线程编写代码如下

string a = "test";
new Thread((s) => { s = "newTest"; }).Start(a);
于 2013-06-06T06:36:24.750 回答
1

如何用 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();

没有它们,您需要获取(或制作)某种类型,这将是您的参数的容器,创建该类型的实例并初始化它的成员。事实上,当您使用闭包时,这是编译器为您所做的工作。那么,为什么要阻止编译器完成所有这些肮脏的工作呢?

于 2013-06-06T06:35:12.557 回答
1

Lambda 表达式可以采用如下参数:

(string s) => MessageBox.Show(s);

这将更改操作的定义,因此接受 lambda 的方法需要能够接受新的委托。

更多解释请参见msdn 文档

于 2013-06-06T06:23:40.563 回答
0

是的,有很多方法可以做到这一点。喜欢

string s = "test";
new Thread((string parameter) => MessageBox.Show(s)).Start();

有关详细信息,请参阅......第一 第二 第三

于 2013-06-06T06:29:43.300 回答