2009-09-12 6 views

Répondre

8

Il est un délégué sans paramètres, écrit en tant que lambda. Identique à:

return new MyItem(itemId, delegate() {return MyFunction(myParam); }); 
+0

Mean delegate() {return MyFunction (myParam); }! – Dario

+0

oui, bien sûr. Léger malentendu (je l'ai corrigé dans ma réponse) –

6

C'est un lambda expression. Le code dans votre exemple est équivalent à ceci:

return new MyItem(itemId, delegate() { MyFunction(myParam); }); 
1

Il est une expression lambda, qui est à peu près équivalent à un délégué anonyme, bien que beaucoup plus puissant

1

Voici les exemples simples de lambda que je viens de créer:

internal class Program 
{ 
    private static void Main(string[] args) 
    { 
     var item = new MyItem("Test"); 
     Console.WriteLine(item.Text); 
     item.ChangeText(arg => MyFunc(item.Text)); 
     Console.WriteLine(item.Text); 
    } 

    private static string MyFunc(string text) 
    { 
     return text.ToUpper(); 
    } 
} 

internal class MyItem 
{ 
    public string Text { get; private set; } 

    public MyItem(string text) 
    { 
     Text = text; 
    } 

    public void ChangeText(Func<string, string> func) 
    { 
     Text = func(Text); 
    } 
} 

La sortie sera:

test

ESSAI

2

Beaucoup de gens ont répondu que c'est juste une fonction anonyme. Mais cela dépend vraiment de la façon dont MyItem est déclaré. Si elle est déclarée comme ce

MyItem(int itemId, Action action) 

Alors oui, le() => {} sera compilé à une fonction anonyme. Mais si MyItem est déclarée comme ceci:

MyItem(int itemId, Expression<Action> expression) 

ensuite le() => {} sera compilé dans un arbre d'expression, constructeur-à-dire MyItem recevra une structure d'objet qu'il peut utiliser pour examiner ce que le code réel à l'intérieur le bloc() => {} était. Linq s'appuie fortement sur ceci par exemple dans Linq2Sql où LinqProvider examine l'arbre d'expression pour comprendre comment construire une requête SQL basée sur une expression.

Mais dans la plupart des cas() => {} sera compilé dans une fonction anonyme.

Questions connexes