2011-04-21 1 views
3
<%= MyClass.GetData(() => new[] { Html.TextBox(prefix + "Postcode", Customer.ZipCode, new { maxlength = 7 }), Html.ValidationIcon(prefix + "ZipCode") })%> 

Quelqu'un peut-il m'expliquer ce que la méthode MyClass.GetData est passée en paramètre?Veuillez me guider pour obtenir la ligne suivante C# code d'expression lambda

Je ne m'attends pas à une explication complète et je sais que je devrais apprendre plus loin dans les méthodes anonyous et l'expression lamda ... Mais pour l'instant pouvez-vous expliquer ce que le code de "() => .... ..." veux dire? Et si vous connaissez de bons articles qui permettent de comprendre ce genre de choses, ce serait cool!

Répondre

5

La propriété() => new [] {...} est une expression lambda qui est une syntaxe abrégée pour un délégué anonyme. Cela signifie que vous passez essentiellement l'équivalent d'un pointeur sur une fonction qui ne prend aucun argument, la partie() indique les arguments et renvoie les résultats dans {} accolades (Html.TextBox .... etc).

Essentiellement, cela équivaudrait à faire passer un nom de méthode qui fait la même chose, mais il est une syntaxe plus concise:

MyClass.GetData(() => new[] { Html.TextBox(prefix + "Postcode", Customer.ZipCode, new { maxlength = 7 }), Html.ValidationIcon(prefix + "ZipCode") } 

est le même, à peu près, que la création d'une méthode, en passant alors que le nom de la méthode dans.

private WebControl[] GetControls() 
{ 
    return new[] { Html.TextBox(prefix + "Postcode", Customer.ZipCode, new { maxlength = 7 }), Html.ValidationIcon(prefix + "ZipCode"); 
} 

....

MyClass.GetData(GetControls); 

ps Voici un bon tutoriel lambda de base: http://blogs.msdn.com/b/ericwhite/archive/2006/10/03/lambda-expressions.aspx

+0

Vous pouvez également y penser comme un rappel – tster

2

() => signifie un lambda qui ne prend aucun paramètre. Donc, vous passez en GetData un lambda qui ne prend aucun paramètre et retourne un nouveau tableau.

2

Cela signifie: Voici un anonymous delegate qui ne prend aucun argument et retourne un tableau d'objets dont le type sera inferred à partir des valeurs de retour de Html.TextBox() et Html.ValidationIcon().

+3

+1 Ma mère serait en mesure de comprendre cela, plus ou moins :) – Bazzz

+0

en anglais? hahahhaa7u :) –

Questions connexes