Metodo di conversione Gruppo di Espressione
-
05-07-2019 - |
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
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)
}
}