【问题标题】:lambda expression based reflection vs normal reflection基于 lambda 表达式的反射与普通反射
【发布时间】:2010-04-23 10:00:00
【问题描述】:

普通反射和可以用这样的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?或者这是明显不同的东西。性能有什么区别?

【问题讨论】:

    标签: .net reflection lambda


    【解决方案1】:

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

    Expression&lt;&gt; 类型族提供对 AST 的直接访问,可用于收集一段代码的结构。这实际上更接近 CodeDOM 工具而不是反射。

    【讨论】:

    • 有没有很好的系列文章可以引导我完成这一切?
    猜你喜欢
    • 1970-01-01
    • 2017-04-22
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-02
    相关资源
    最近更新 更多