我有这个方法:
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 中。
那么我怎样才能做到这一点呢?也许我的设计有误?
最佳答案
使用
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>
(即具有必要数量参数的相关委托(delegate))如果你同时需要 Computer
和 string
在你的代码块中。 Lambda 表达式将相应更改:(s, comp) => { /*...*/ }
关于c# - Lambda 和 Foreach,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14450277/