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

17 浏览
0 Comments

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

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

例如:

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

对我来说,Lambda表达式确实让生活变得更简单了,为什么从外部世界传递一个变量似乎这么复杂呢?

0
0 Comments

问题的出现原因是:使用Thread类创建线程时,Thread类的构造函数和Start方法只支持传递一个参数,无法直接传递多个变量。

解决方法是:可以使用元组(Tuple)或闭包(closures)来传递多个变量。

以下是一种可能的文章整理方式:

在使用Thread类创建参数化线程时,可以按照以下方式编写代码:

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

这种方式是最简单的方法,但是如果我们需要在相同的情况下传递两个变量,该如何处理呢?

实际上,Thread类的构造函数和Start方法只支持传递一个参数。在msdn.microsoft.com/en-us/library/system.threading.thread.aspx中可以看到,Thread类只有两个重载的构造函数和Start方法,分别用于传递0个参数和1个参数。

为了传递两个变量,我们可以使用元组(Tuple)或闭包(closures)。

如果使用元组,可以按照以下方式编写代码:

Tuple tuple = new Tuple("test", 10);
new Thread((t) => { 
    string a = t.Item1;
    int b = t.Item2;
    // do something with a and b
}).Start(tuple);

如果使用闭包,可以按照以下方式编写代码:

string a = "test";
int b = 10;
new Thread(() => { 
    // do something with a and b
}).Start();

以上就是在Thread类中传递多个变量的解决方法。无论是使用元组还是闭包,都可以实现传递多个变量的目的。

0
0 Comments

问题的出现原因是想要将一个变量直接传递给Lambda方法,但是在使用方法组语法时并不复杂。但是,想要从外部世界传递一个变量进来就有点困难了。实际上,我曾经遇到一个真实的情况,我只是想让一堆MessageBox弹出信息通过一个快速触发的事件传递过来。我最终成功实现了这个目标,但是感觉很奇怪,为什么不能用一行代码来做到这一点呢。

下面是一种解决方法,通过在Lambda表达式中创建一个闭包来传递变量:

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

这样,我们就可以在Lambda表达式中访问外部变量message,并将其传递给MessageBox.Show方法。通过创建一个匿名方法,我们可以在其中引用外部变量。

这是一种简单而有效的解决方法,可以让我们直接将变量传递给Lambda方法。

0
0 Comments

问题的原因是Lambda表达式可以接受参数,但是当将一个变量直接传递给Lambda方法时会出现问题,因为Lambda方法接受的是一个委托,而变量不是委托类型。

解决方法是使用一个适当的委托类型来接受变量,并将其传递给Lambda方法。这样,Lambda表达式就可以正确地接受参数。

例如,如果要将一个字符串变量传递给Lambda方法,并显示在MessageBox中,可以使用以下代码:

Action action = (string s) => MessageBox.Show(s);
string message = "Hello, world!";
action(message);

在这个例子中,我们使用了一个Action委托类型来接受字符串变量,并将其传递给Lambda方法。然后,我们定义了一个字符串变量message并赋值为"Hello, world!",最后将message作为参数传递给action委托。

通过这种方式,我们可以将变量直接传递给Lambda方法,并在需要时使用适当的委托类型来接受参数。这样就解决了将变量直接传递给Lambda方法的问题。

0