基于lambda表达式的反射与正常反射

时间:2010-04-23 10:00:01

标签: .net reflection lambda

正常反射和使用lambda表达式(例如build your own MVVM)可以完成的反射有什么区别:

public void NotifyOfPropertyChange<TProperty>(Expression<Func<TProperty>> property)
{
    var lambda = (LambdaExpression)property;
    MemberExpression memberExpression;
    if (lambda.Body is UnaryExpression)
    {
        var unaryExpression = (UnaryExpression)lambda.Body;
        memberExpression = (MemberExpression)unaryExpression.Operand;
    }
    else memberExpression = (MemberExpression)lambda.Body;
    NotifyOfPropertyChange(memberExpression.Member.Name);
 }

基于lambda的反射是否仅在内部使用普通反射API?或者这是一个显着不同的东西。什么是性能差异?

1 个答案:

答案 0 :(得分:2)

反射的目标是程序集,类和接口结构。它提供对类定义,方法签名,类型信息等的访问。它不提供对抽象语法树(AST)或字节码形式的方法代码的访问。

Expression<>类型系列提供对AST的直接访问,可用于收集一段代码的结构。这实际上比CodeDOM设施更接近于反射。