2

我有这个方法:

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 中创建的计算机集合的对象计算机。所以如果我做了这样的事情:

Wrapper((s) => {

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

});

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

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

4

1 回答 1

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>(即具有必要数量参数的相关委托) 。Lambda 表达式将相应更改:Computerstring(s, comp) => { /*...*/ }

于 2013-01-22T01:47:40.863 回答