【发布时间】:2015-04-29 12:44:42
【问题描述】:
我想转换这个:
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");
代码现在可以编译,但运行时出现问题。
我正在尝试获取target 的属性Name 的值,如果对象是dynamic,这可能有意义。
但由于target 被认为是object 类型,因此表达式会抛出一个错误,告诉我Name 不作为属性存在。
是否有用于获取动态属性的表达式?
【问题讨论】:
-
看看这个问题:stackoverflow.com/questions/3562088/… 它处理动态和表达式树
标签: c# .net c#-4.0 dynamic expression-trees