2009-03-10 7 views
2

Que dois-je faire pour que l'exemple lambda suivant fonctionne?Pourquoi cet exemple lambda du site MSDN ne fonctionne-t-il pas?

ERREUR: affectation uniquement, appel, incrément, décrément, et de nouvelles expressions d'objets peuvent être utilisés comme une déclaration

http://msdn.microsoft.com/en-us/library/bb397687.aspx

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Linq.Expressions; 

namespace TestLambda 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      delegate int del(int i); 
      del myDelegate = x => x * x; 
      int j = myDelegate(5); //j = 25 
     } 

    } 

} 
+0

JaredPar a couvert il; mais notez que les échantillons MSDN sont parfois abrégés. Sans doute, une ellipse aurait été plus claire ici ... –

Répondre

6

Vous devez déclarer le délégué à l'extérieur de la méthode:

class Program 
{ 
    delegate int del(int i); 

    static void Main(string[] args) 
    {    
     del myDelegate = x => x * x; 
     int j = myDelegate(5); //j = 25 
    } 

} 
6

Il est illégal de définir un type en tant que corps de la méthode déclaration en C#. Vous devrez déplacer le délégué en dehors de la méthode pour que cela soit compilé. Par exemple

delegate int del(int i); 

public static void Main(string[] args) { 

    del myDelegate = x => x * x; 
    int j = myDelegate(5); //j = 25 
} 
+0

Ou encore mieux, il suffit d'utiliser Func ;-p –

+0

@ Marc, oui. Je pense que si vous pouviez essentiellement typedef un Func <>, Action <> au niveau de l'assemblage, cela empêcherait les gens de créer de nouveaux types de délégués quand un simple Func <>, Action <> ferait l'affaire. – JaredPar

Questions connexes