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