Construyendo árboles de expresión

c# expression-trees lambda linq

Pregunta

Estoy luchando con la idea de cómo construir un árbol de expresiones para más lambdas como la que se muestra a continuación, y mucho menos algo que pueda tener varias declaraciones. Por ejemplo:

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

Apreciaría cualquier pensamiento.

Respuesta aceptada

Yo sugeriría leer la lista de métodos en la clase de Expresión , todas sus opciones están enumeradas allí, y la Guía de Programación de los Árboles de Expresión .

En cuanto a este caso particular:

/* 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();


Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow