Question

J'essaie de savoir s'il existe une syntaxe simple pour convertir un groupe de méthodes en une expression. Cela semble assez facile avec les lambdas, mais cela ne se traduit pas par des méthodes:

Étant donné

public delegate int FuncIntInt(int x);

tous les éléments ci-dessous sont valides:

Func<int, int> func1 = x => x;
FuncIntInt del1 = x => x;
Expression<Func<int, int>> funcExpr1 = x => x;
Expression<FuncIntInt> delExpr1 = x => x;

Mais si j'essaie la même chose avec une méthode d'instance, elle se décompose au niveau des expressions:

Foo foo = new Foo();
Func<int, int> func2 = foo.AFuncIntInt;
FuncIntInt del2 = foo.AFuncIntInt;
Expression<Func<int, int>> funcExpr2 = foo.AFuncIntInt; // does not compile
Expression<FuncIntInt> delExpr2 = foo.AFuncIntInt;      //does not compile

La compilation des deux derniers échoue avec & "Impossible de convertir le groupe de méthodes" AFuncIntInt "en type non délégué" System.Linq.Expressions.Expression < ... > '. Aviez-vous l'intention d'invoquer la méthode? & Quot;

Y a-t-il une bonne syntaxe pour capturer une méthode grou dans une expression?

merci, arne

Était-ce utile?

La solution

Comment ça?

  Expression<Func<int, int>> funcExpr2 = (pArg) => foo.AFuncIntInt(pArg);
  Expression<FuncIntInt> delExpr2 = (pArg) => foo.AFuncIntInt(pArg);

Autres conseils

Il est également possible de le faire en utilisant NJection.LambdaConverter , un convertisseur Délégué à LambdaExpression, bibliothèque

public class Program
{
    private static void Main(string[] args) {
       var lambda = Lambda.TransformMethodTo<Func<string, int>>()
                          .From(() => Parse)
                          .ToLambda();            
    }   

    public static int Parse(string value) {
       return int.Parse(value)
    } 
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top