Quelle est la signification de cette expression "() =>". Je l'ai vu utilisé dans un constructeur:C# 3.0 Signification de l'expression() =>
return new MyItem(itemId,() => MyFunction(myParam));
Merci
Quelle est la signification de cette expression "() =>". Je l'ai vu utilisé dans un constructeur:C# 3.0 Signification de l'expression() =>
return new MyItem(itemId,() => MyFunction(myParam));
Merci
Il est un délégué sans paramètres, écrit en tant que lambda. Identique à:
return new MyItem(itemId, delegate() {return MyFunction(myParam); });
C'est l'expression lambda.
C'est un lambda expression. Le code dans votre exemple est équivalent à ceci:
return new MyItem(itemId, delegate() { MyFunction(myParam); });
Il est une expression lambda, qui est à peu près équivalent à un délégué anonyme, bien que beaucoup plus puissant
ya ceci est un lambda expression. Le compilateur crée automatiquement délégués ou expression types d'arbres
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
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.
Mean delegate() {return MyFunction (myParam); }! – Dario
oui, bien sûr. Léger malentendu (je l'ai corrigé dans ma réponse) –