将变量直接传递给Lambda方法
本文关键字:Lambda 方法 变量 | 更新日期: 2023-09-27 18:17:04
是否有办法直接将变量传递给lambda方法?
例如string s = "test";
new Thread(() => MessageBox.Show(s)).Start();
Lambda表达式真的让我的生活变得如此简单,为什么从外部世界传入一个变量看起来如此复杂?
这并不复杂,特别是在使用method-group语法的情况下:
new Thread(MessageBox.Show).Start("test");
为参数化线程编写如下代码
string a = "test";
new Thread((s) => { s = "newTest"; }).Start(a);
Lambda表达式可以接受如下参数:
(string s) => MessageBox.Show(s);
这会改变动作的定义,所以接受lambda的方法需要能够接受新的委托。
我如何用1个分号完成这个?
有什么问题吗?
new Thread(() => MessageBox.Show("test")).Start();
乌利希期刊指南。
传递一些东西给lambda的最简单方法是闭包(这就是你的问题看起来的样子)。这就是它们如此方便的原因。通过传递如下所示的参数,您将破坏lambda的所有首选项。从下一个关于传递两个或多个参数的问题中,您应该清楚了。
使用闭包,你可以很容易地做到这一点:// somewhere in the code
var owner = // ...
var text = // ...
var caption = // ...
// here's the closures:
new Thread(() => MessageBox.Show(owner, text, caption)).Start();
如果没有它们,你需要获取(或创建)某种类型,它将是你的形参的容器,创建该类型的实例并初始化它的成员。实际上,当您使用闭包时,这就是编译器为您做的工作。那么,为什么要阻止编译器完成所有这些繁琐的工作呢? 是的,有很多方法可以做到。像
string s = "test";
new Thread((string parameter) => MessageBox.Show(s)).Start();
有关更多详细信息,请参阅......第一第二第三