我有这个方法:
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中。
那么我怎么能做到这一点?也许我有错误设计?
答案 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) => { /*...*/ }