C# 将变量直接传递给Lambda方法?

C# 将变量直接传递给Lambda方法?,c#,lambda,C#,Lambda,有没有办法直接将变量传递给lambda方法 比如说 string s = "test"; new Thread(() => MessageBox.Show(s)).Start(); Lambda表达式真的让我的生活变得如此轻松,为什么从外部世界传入变量看起来如此复杂?Lambda表达式可以采用如下参数: (string s) => MessageBox.Show(s); 这将更改操作的定义,因此接受lambda的方法需要能够接受新委托 有关详细说明,请参阅。Lambda表达式可以

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

比如说

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

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

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

(string s) => MessageBox.Show(s);
这将更改操作的定义,因此接受lambda的方法需要能够接受新委托


有关详细说明,请参阅。

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

(string s) => MessageBox.Show(s);
这将更改操作的定义,因此接受lambda的方法需要能够接受新委托


有关进一步的解释,请参阅。

这其实并不复杂,特别是如果您使用的是方法组语法:

new Thread(MessageBox.Show).Start("test");

这其实并不复杂,特别是如果您使用的是方法组语法:

new Thread(MessageBox.Show).Start("test");

是的,有很多方法。像

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

详情请参阅

是的,有很多方法。像

string s = "test";
new Thread((string parameter) => MessageBox.Show(s)).Start();
详情请参阅


如何使用1个分号来完成此操作

有什么问题吗

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

向lambda传递内容的最简单方法是闭包(这是您的问题的外观)。这就是他们如此方便的原因。通过传递如图所示的参数,您正在破坏lambdas的所有首选项。从下一个关于传递两个或多个参数的问题中可以清楚地看到这一点

使用闭包,您可以轻松做到这一点:

// somewhere in the code
var owner = // ...
var text = // ...
var caption = // ...

// here's the closures:
new Thread(() => MessageBox.Show(owner, text, caption)).Start();
没有它们,您需要获取(或生成)某种类型,它将是参数的容器,创建该类型的实例并初始化其成员。事实上,这是编译器在使用闭包时为您所做的工作。那么,为什么要阻止编译器做这些肮脏的工作呢


如何使用1个分号来完成此操作

有什么问题吗

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

向lambda传递内容的最简单方法是闭包(这是您的问题的外观)。这就是他们如此方便的原因。通过传递如图所示的参数,您正在破坏lambdas的所有首选项。从下一个关于传递两个或多个参数的问题中可以清楚地看到这一点

使用闭包,您可以轻松做到这一点:

// somewhere in the code
var owner = // ...
var text = // ...
var caption = // ...

// here's the closures:
new Thread(() => MessageBox.Show(owner, text, caption)).Start();

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

Hi对于参数化线程,请编写如下代码

string a = "test";
new Thread((s) => { s = "newTest"; }).Start(a);

为参数化线程编写如下代码

string a = "test";
new Thread((s) => { s = "newTest"; }).Start(a);


我不明白复杂的部分是什么。我如何用1个分号来完成这个任务?仅仅显示
消息框
是很复杂的。如果我发布的代码能够正常工作,那就简单了。我希望有一个简单的方法来做到这一点。我不知道复杂的部分是什么。我如何用1个分号来完成这一点?仅仅显示
消息框
是很复杂的。如果我发布的代码能够正常工作,那就简单了。我希望有一个简单的方法可以做到这一点。这段代码给了我一个错误,它说我不能声明
s
两次。这段代码给了我一个错误,它说我不能声明
s
两次。不过我想从
外部世界传入一个变量。事实上,我有一个真实的情况,我只是想让一个快速触发的事件传递一堆
MessageBox
es弹出信息。我能够做到这一点,但似乎很愚蠢,我不能在一行代码中做到这一点,因为它是什么。2竖起大拇指的代码,这是给我一个错误。我肯定代码中的某些地方一定有智慧,但我还没有达到确定它的水平。不过,我想从外部世界传递一个变量。事实上,我有一个真实的情况,我只是想让一个快速触发的事件传递一堆
MessageBox
es弹出信息。我能够做到这一点,但似乎很愚蠢,我不能在一行代码中做到这一点,因为它是什么。2竖起大拇指的代码,这是给我一个错误。我肯定代码中的某些地方一定有智慧,但我还没有达到确定它的水平。我想传递一个不断变化的变量。我认为user2455681可能已经直接回答了这个问题。你能在没有元组的情况下传递多个参数吗?在我看来,这需要一个简单的情况,并且只因为我不知道如何轻松地传递多个参数而使它变得复杂。当这只是一件简单的小事,只需要编写一次代码时,正确的方法是什么?是的!这确实有帮助!我真的以为我在尝试你之前发布的东西时犯了某种错误。可能我键入了错误的内容。我想传递一个不断变化的变量。我认为user2455681可能已经直接回答了这个问题。你能在没有元组的情况下传递多个参数吗?在我看来,这需要一个简单的情况,并且只因为我不知道如何轻松地传递多个参数而使它变得复杂。当这只是一件简单的小事,只需要编写一次代码时,正确的方法是什么?是的!这确实有帮助!我真的以为我在尝试你之前发布的东西时犯了某种错误。也许我打错了什么。这绝对是最简单的方法。非常感谢。现在我的下一个问题是,在这种情况下,传递两个变量的最简单方法是什么。@codecamp您不能,线程构造函数(和start方法)只有两个重载。没有争论,只有一个争论。对于传递两个“东西”,您可以使用一个元组,也可以只使用闭包(您的原始代码),这是一种更简单的方法。您所指的原始代码是什么?我很想知道在这个新的线程语句中传递2或3个变量的最简单方法。这绝对是正确的