c# - Lambda 和 Foreach

标签 c# .net

我有这个方法:

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))如果你同时需要 Computerstring在你的代码块中。 Lambda 表达式将相应更改:(s, comp) => { /*...*/ }

关于c# - Lambda 和 Foreach,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14450277/

相关文章:

c# - 异步/等待和多处理

c# - 有没有办法组合 List.Contains() 和 string.StartsWith()?

.net - SQL session 状态 - 数据库 SessionId 与 ASP.NET_SessionID 值不同

c# - 如何在访问 Asp.net MVC 中的 View 文件夹时显示错误页面

C# Dictionary<> 和可变键

.net - 在 .NET 框架中强制使用英语语言异常

c# - 显示带有前导零的数字文本框值

C# : How to assign and retrieve values into member variables of BASE class

c# - ASP.NET Web 服务模板不存在?

asp.net - 有没有办法确保在回收之前关闭应用程序池中的所有事件 session