Lambda和Foreach

Ric*_*olo 2 .net c#

我有这个方法:

public Wrapper(Action<string> codeBlock)
{
   //Code code code

        Parallel.ForEach<Computer>(Computers, computer =>
        {
                //CODE CODE 
               codeblock();

               //More code

        );
    //more code

 }
Run Code Online (Sandbox Code Playgroud)

我用它来将一个代码块放在一个包装器中,这对我的应用程序来说很重要.

我用类似的东西来调用它

Wrapper((s) => {

//My Code block
//code
//More code

});
Run Code Online (Sandbox Code Playgroud)

我想在我的代码块中使用在包装器的foreach中创建的集合Computers的对象计算机.所以,如果我做了这样的事情:

Wrapper((s) => {

//My Code block
 AFunction(computer);
//More code

});
Run Code Online (Sandbox Code Playgroud)

它显然是失败的,因为在我调用包装器的上下文中"计算机"不存在,只存在于包装器的foreach中.

那么我怎么能做到这一点?也许我有错误设计?

hor*_*rgh 8

使用

public Wrapper(Action<Computer> codeBlock)
{
    //...
    Parallel.ForEach<Computer>(Computers, computer =>
    {
           //...
           codeblock(computer);
           //...
    );
}
Run Code Online (Sandbox Code Playgroud)

代替.

Wrapper((s) => {    // s is of type Computer here now
    //...
    AFunction(s);
    //...
});
Run Code Online (Sandbox Code Playgroud)

当然,Action<T1,T2>如果您需要两者Computer并且string在代码块中,您可以使用(即相关代理具有必要数量的参数).Lambda表达式将相应更改:(s, comp) => { /*...*/ }