2011-06-26 7 views
1

Je reçois généralement des exemples de code qui utilisent des expressions lambda. Je Stil utilise .net 2.0, et trouve qu'il est difficile de travailler avec un tel code, par exempleconversion d'expressions Linq/Lambda en méthodes anonymes

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); 
    } 
} 

Comment convertir cette expression à l'une de ses alternatives (code i.e. non lambda ou méthodes anonymes)?

grâce

+2

Je suggère de prendre du temps et d'apprendre lambdas plutôt que de convertir du code. – Magnus

+0

@Magnus, cela ne fonctionnera pas dans .net 2.0 ou le sera-t-il? – Smith

+1

Travaillez-vous avec .Net en tant que développeur ou les applications doivent-elles être déployées là? C'est important, parce que Lambda et toute autre forme de méthodes anonymes sont spécifiques au compilateur, alors que Linq est .Net 3.5 et plus. Vous pouvez utiliser le compilateur 4.0 pour cibler 2.0, ce qui signifie que vous pouvez utiliser Lambda. Ce morceau de code ne contient aucun Linq. – Dykam

Répondre

6

Une expression lambda en C# est vraiment juste un délégué. Compte tenu de votre utilisation de .Net 2.0, vous pouvez utiliser des méthodes anonymes pour définir un délégué à la volée, donc remplacer la ligne de code avec:

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

Bien sûr normalement le param (état) déclaré est utilisé quelque part dans la fonction. – Swanny

+0

Bien que ce ne soit pas la solution à mon problème, je dois juste accepter une réponse de toute façon – Smith

1

Pourquoi utilisez-vous encore .Net 2? Il vous manque beaucoup de grands changements, en particulier LINQ. Cela étant dit, lambdas ne sont pas une caractéristique de .Net 3.5, ils sont une caractéristique de C# 3.0 et vous pouvez l'utiliser lors de la compilation pour .Net 2.0, si vous avez vraiment besoin de faire cela.

+0

comment puis-je développer en .net 2 et utiliser lambda, y at-il une référence? – Smith

+0

@Smith, vous devez utiliser Visual Studio qui le supporte (2008 ou 2010) et sélectionnez le framework cible dans les propriétés du projet. Voir [MSDN] (http://msdn.microsoft.com/en-us/library/bb398202.aspx). – svick

Questions connexes