2011-06-26 71 views
1

我通常會得到使用lambda表達式的代碼示例。我還是老樣子使用.NET 2.0,並發現它很難與這樣的代碼工作,例如將Linq/Lambda表達式轉換爲匿名方法

foreach(var item in items) 
{ 
    var catCopy = item; 
    foreach(var word in words) 
    { 
     var wordCopy = word; 
     var waitCallback = new WaitCallback(state => 
     { 
      DoSomething(wordCopy, catCopy); 
     }); 

     ThreadPool.QueueUserWorkItem(waitCallback); 
    } 
} 

我怎麼這樣的表達式轉換爲任何其替代(即非拉姆達代碼或匿名方法)?

謝謝

+2

我建議花點時間學習lambdas而不是轉換代碼。 – Magnus

+0

@Magnus,它不會在.net 2.0中工作,或者它會嗎? – Smith

+1

你是否以.Net作爲開發人員工作,還是必須在那裏部署應用程序?這很重要,因爲Lambda和任何其他形式的匿名方法都是編譯器特有的,而Linq是.Net 3.5及更高版本。您可以使用4.0編譯器來定位2.0,這意味着您可以使用Lambda。這段代碼不包含任何Linq。 – Dykam

回答

6

在C#中的lambda表達式實際上只是一個委託。鑑於你使用的.Net 2.0,你可以使用匿名方法來定義上飛的委託,所以用替代的代碼行:你爲什麼還在使用的.Net 2

var waitCallback = new WaitCallback(
         delegate(object state) { 
          DoSomething(workCopy, catCopy); 
         }); 
+0

當然通常聲明的參數(狀態)用在函數的某處。 – Swanny

+0

雖然這不是我的問題的解決方案,但我只需要接受一個答案 – Smith

1

?你錯過了很多重大的改變,特別是LINQ。

這就是說,lambdas 不是的一個特性.Net 3.5,它們是C#3.0的一個特性,如果你真的需要這樣做,你可以在爲.Net 2.0編譯時使用它。

+0

如何在.net 2中開發並使用lambda,是否有任何參考? – Smith

+0

@Smith,您必須使用支持它的Visual Studio(2008或2010)並在項目屬性中選擇目標框架。請參閱[MSDN](http://msdn.microsoft.com/zh-cn/library/bb398202.aspx)。 – svick

相關問題