Árvores de expressão com parâmetro dinâmico
Eu quero converter isso:
Func<dynamic, object> myFunc = t => return t.Name + " " + t.Surname;
Em uma árvore de expressão.
O que eu inventei é o seguinte:
ParameterExpression target = ExpressionParameter(typeof(dynamic), "target");
ParameterExpression result = ExpressionParameter(typeof(object), "result");
BlockExpression block = Expression.Block(
new [] { result },
Expression.Assign(
result,
Expression.Add(
Expression.Add(
Expression.Property(target, "Name"),
Expression.Constant(" ", typeof(string))
),
Expression.Property(target, "Surname")
)
)
);
Func<dynamic, object> myFunc = Expression.Lambda<dynamic, object>>(block, target).Compile();
No entanto, o compilador não gostatypeof(dynamic)
, e eu meio que entendi.dynamic
não é um tipo, é umobject
em essência.
Então eu comecei a mudar oParameterExpression
:
ParameterExpression target = ExpressionParameter(typeof(object), "target");
O código agora é compilado, mas há um problema no tempo de execução.
Estou tentando obter o valor da propriedadeName
dotarget
, que pode ter sentido se o objeto foidynamic
.
Mas desdetarget
é considerado do tipoobject
, a expressão lança um erro dizendo-meName
não existe como uma propriedade.
Existe uma expressão para buscar uma propriedade dinâmica?