2009-07-31 9 views
0

peuvent les éléments suivants se faire en C# ?:JavaScript comme des fonctions anonymes en C#

var greeting = "Hello" + function() 
{ 
    return " World"; 
}() + "!"; 

Je veux faire quelque chose le long des lignes de ce (code C# pseudo):

var cell = new TableCell { CssClass = "", Text = return delegate() 
{ 
    return "logic goes here"; 
}}; 

Fondamentalement Je veux implémenter la portée en ligne d'une certaine logique, au lieu de déplacer cette logique de morceau dans une méthode séparée.

Répondre

2

Si vous utilisez un type anonyme, vous devrez lancer la méthode anonyme ou l'expression lambda explicitement; Si vous affectez à une propriété dont le type est déjà connu, vous ne le ferez pas. Par exemple:

var cell = new TableCell { CssClass = "", Text = (Func<string>) (() => 
{ 
    return "logic goes here"; 
})}; 

C'est légèrement plus laid, mais cela fonctionne.

Mais oui, vous pouvez certainement utiliser une fonction anonyme comme celle-ci. Vous aurez besoin d'appeler explicitement lorsque vous souhaitez récupérer le texte, vous l'esprit:

Console.WriteLine("{0}: {1}", cell.CssClass, cell.Text()); 
9
var greeting = "Hello" + new Func<String>(() => " World")() + "!"; 
+0

mis à jour ma question. – roosteronacid

+0

Heh, très bien! –

+0

Votre réponse m'a aidé, mais elle ne correspond pas à la question et à la réponse de Jon Skeet. – roosteronacid

2

va mettre dans une réponse moi-même plus bavard:

var tr = new TableRow { CssClass = "" }; 

tr.Cells.AddRange(new [] 
{ 
    new TableCell { CssClass = "", Text = "Hello" }, 
    new TableCell { CssClass = "", Text = new Func<String>(() => 
    { 
     // logic goes here 
     return ""; 
    })()} 
}); 
Questions connexes