有没有办法直接将变量传递给lambda方法?
例如
string s = "test";
new Thread(() => MessageBox.Show(s)).Start();
Lambda表达式确实让我的生活变得如此简单,为什么从外部世界传递变量看起来如此复杂?
答案 0 :(得分:2)
它并不复杂,特别是如果您使用方法组语法:
new Thread(MessageBox.Show).Start("test");
答案 1 :(得分:1)
Lambda表达式可以采用如下参数:
(string s) => MessageBox.Show(s);
这会改变动作的定义,因此接受lambda的方法需要能够接受新的委托。
有关详细说明,请参阅msdn document。
答案 2 :(得分:1)
如何用1分号完成此操作?
有什么问题?
new Thread(() => MessageBox.Show("test")).Start();
<强> UPD 强>
将一些东西传递给lambda的最简单方法是闭包(这就是你的问题的样子)。这就是他们如此方便的原因。通过传递如here所示的参数,你就会破坏lambda的所有偏好。从下一个关于传递两个或更多参数的问题中,您应该清楚这一点。
使用闭包,您可以轻松完成此操作:
// somewhere in the code
var owner = // ...
var text = // ...
var caption = // ...
// here's the closures:
new Thread(() => MessageBox.Show(owner, text, caption)).Start();
如果没有它们,您需要获取(或制作)某些类型,这将是您的参数的容器,创建该类型的实例并初始化它的成员。实际上,当你使用闭包时,这是编译器为你做的工作。那么,为什么要阻止编译器完成所有这些脏工作呢?
答案 3 :(得分:1)
嗨,参见下面的参数化线程写代码
string a = "test";
new Thread((s) => { s = "newTest"; }).Start(a);
答案 4 :(得分:0)