【发布时间】:2016-10-25 19:49:25
【问题描述】:
我正在使用一个库,其中包含一个函数,该函数采用表达式参数 x => x.Name。
使用反射,我试图为 Foo 的每个属性调用它。这意味着我需要为每个属性创建一个 Expression
我一直在阅读有关表达式树的文章,但没有任何内容涵盖这种情况。
foreach (var property in typeof(Foo).GetProperties())
{
ParameterExpression pe = Expression.Parameter(typeof(Foo), "x");
MemberExpression me = Expression.Property(pe, property.Name);
Expression<Func<Foo, object>> expression = ... // x => x.Name
Bar(expression, property.Name);
}
已解决:
foreach (var property in typeof(Foo).GetProperties())
{
ParameterExpression pe = Expression.Parameter(typeof(Foo), "x");
MemberExpression me = Expression.Property(pe, property.Name);
var expression = (Expression<Func<Foo, object>>)
Expression.Lambda(Expression.Convert(me, typeof(object)), pe);
Bar(expression, property.Name);
}
【问题讨论】:
-
顺便问一下 FileRow 是什么?姓名类型?
-
@FarhadJabiyev Reflection.Emit 在这种情况下绝对是矫枉过正。
标签: c# expression