我希望你能够将这个转换:
Func<dynamic, object> myFunc = t => return t.Name + " " + t.Surname;
转换为表达式树。
我想到的是这样:
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();
然而,编译器不喜欢
typeof(dynamic)
,我有点理解。 dynamic
不是一种类型,本质上是一个object
。因此,我继续更改了
ParameterExpression
:ParameterExpression target = ExpressionParameter(typeof(object), "target");
代码现在可以编译,但在运行时存在一个问题。
我尝试获取目标对象的属性“Name”的值,如果对象是“dynamic”的话可能有意义。
但由于将“target”认为是“object”类型,表达式会抛出错误,告诉我“Name”不存在作为属性。
是否有一种表达式可以获取动态属性?