Lambda and Foreach

本文关键字:Foreach and Lambda | 更新日期: 2023-09-27 17:54:53

我有这个方法:

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的对象computer。所以如果我这样写:

Wrapper((s) => {
//My Code block
 AFunction(computer);
//More code
});

它显然失败了,因为"computer"不存在于我调用包装器的上下文中,只存在于包装器的foreach中。

那我怎么才能做到呢?也许我的设计有问题?

Lambda and Foreach

使用

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

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

当然,如果你需要在代码块中同时使用Computerstring,你可以使用Action<T1,T2>(即具有必要数量参数的相关委托)。Lambda表达式会相应改变:(s, comp) => { /*...*/ }