Lambda和Foreach

时间:2013-01-22 01:43:43

标签: c# .net

我有这个方法:

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

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

               //More code

        );
    //more code

 }

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

我用

之类的东西来调用它
Wrapper((s) => {

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

});

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

Wrapper((s) => {

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

});

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

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

1 个答案:

答案 0 :(得分:8)

使用

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

代替。

Wrapper((s) => {    // s is of type Computer here now
    //...
    AFunction(s);
    //...
});

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