Domanda

Sto cercando di capire se c'è una sintassi semplice per la conversione di un Gruppo di metodi di espressione.Sembra abbastanza facile, con le espressioni lambda, ma non si traduce in metodi:

Dato

public delegate int FuncIntInt(int x);

tutte le seguenti sono validi:

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

Ma se io provo la stessa cosa con un metodo di istanza, si rompe in Espressioni:

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

Gli ultimi due non riescono a compilare con "Impossibile convertire il metodo del gruppo di 'AFuncIntInt' a non delegare tipo 'System.Linq.Le espressioni.Espressione<...>'.Hai intenzione di invocare il metodo?"

Quindi c'è una buona sintassi per l'acquisizione di un metodo di grou in un'espressione?

grazie, arne

È stato utile?

Soluzione

Che ne dici di questo?

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

Altri suggerimenti

È anche possibile farlo utilizzando NJection.LambdaConverter un Delegato per LambdaExpression converter Biblioteca

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)
    } 
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top