2013-01-22 59 views
2

我有這樣的方法:LAMBDA和foreach

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 

}); 

它obviouslly失敗,因爲「電腦」在我調用包裝的環境不存在,只存在包裝的內部的foreach。

那麼我怎麼能做到這一點?也許我有一個錯誤設計?

+3

不應該是'public Wrapper(Action codeBlock)'然後呢? – horgh

回答

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>(帶參數的必要數量即與代表),如果你需要同時Computerstring你的代碼塊中。 Lambda表達式會相應地改變:(s, comp) => { /*...*/ }