Costruire alberi di espressione

c# expression-trees lambda linq

Domanda

Sto lottando con l'idea di come costruire un albero di espressioni per più lambda come quello qui sotto, per non parlare di qualcosa che potrebbe avere più affermazioni. Per esempio:

Func<double?, byte[]> GetBytes
      = x => x.HasValue ? BitConverter.GetBytes(x.Value) : new byte[1] { 0xFF };

Gradirei qualsiasi pensiero.

Risposta accettata

Suggerirei di leggere l' elenco dei metodi nella classe Espressione , tutte le opzioni sono elencate qui e la Guida alla programmazione di Expression Trees .

Per quanto riguarda questa particolare istanza:

/* build our parameters */
var pX = Expression.Parameter(typeof(double?));

/* build the body */
var body = Expression.Condition(
    /* condition */
    Expression.Property(pX, "HasValue"),
    /* if-true */
    Expression.Call(typeof(BitConverter),
                    "GetBytes",
                    null, /* no generic type arguments */
                    Expression.Member(pX, "Value")),
    /* if-false */
    Expression.Constant(new byte[] { 0xFF })
);

/* build the method */
var lambda = Expression.Lambda<Func<double?,byte[]>>(body, pX);

Func<double?,byte[]> compiled = lambda.Compile();


Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché