Je pensais à la différence entre Expression<Func<>>
et Func<>
, et je me demandais si vous pouvez convertir une méthode statique à un arbre d'expression comme suit:C# syntaxe d'expression
class Program
{
static void Main(string[] args)
{
Func<int, int> t = x => hrm(x);
Func<int, int> t2 = new Func<int, int>(hrm);
// Works as expected:
Expression<Func<int, int>> et = x => hrm(x);
// Brokenness:
Expression<Func<int, int>> et2 = new Func<int, int>(hrm);
}
static int hrm(int x)
{
return x + 9;
}
}
Ce qui est si spécial au sujet de la deuxième « Func <> "Qu'il ne peut pas être converti en Expression, quand le premier peut?
Merci, itowlson. Je ne suis pas le maître de la démarque. –
Point décisif: ce n'est pas tout à fait que "les expressions et les lambdas sont syntaxiquement équivalents", mais que "les lambdas représentant les expressions et les lambdas représentant les délégués sont syntaxiquement équivalents". Les deux sont toujours des lambdas. Mais bonne explication du point général que le compilateur traite un lambda différemment selon ce qu'il retourne. – itowlson
Vous avez raison. Je vais le corriger. –