Frage

Ich versuche, aus Figur, wenn es eine einfache Syntax ist eine Methode Gruppe zu einem Ausdruck für die Umwandlung. Es scheint einfach genug mit Lambda-Ausdrücke, aber es übersetzt nicht auf Methoden:

Da

public delegate int FuncIntInt(int x);

alle die folgenden gelten:

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

Aber wenn ich das gleiche mit einer Instanzmethode versuchen, bricht es in den Ausdrücken unten:

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

Die beiden letzten beiden nicht mit kompilieren „Die Methode kann nicht Gruppe AFuncIntInt 'zu nicht-Delegattyp‚System.Linq.Expressions.Expression <...>‘konvertieren. Bitte benutzen Sie beabsichtigen, die Methode aufzurufen?“

So ist es eine gute Syntax für ein Verfahren Grou in einem Ausdruck erfassen?

Danke, arne

War es hilfreich?

Lösung

Wie wäre das?

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

Andere Tipps

Es ist auch möglich, es zu tun mit NJection.LambdaConverter einen Delegierten Lambda Konverter Bibliothek

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)
    } 
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top