2010-04-23 54 views
2

是什麼能與lambda表達式如此進行正反射與反射之間的差(取形式build your own MVVM):lambda表達式反射與正常反射

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); 
} 

只是使用拉姆達基於反射正常的反射API在內部?或者這是明顯不同的東西。什麼是性能差異?

回答

2

反射目標組件,類和接口結構。它提供對類定義,方法簽名,類型信息等的訪問。它不提供訪問抽象語法樹(AST)或字節碼形式的方法代碼。

Expression<>類型系列提供了對AST的直接訪問,它可以用來收集一段代碼的結構。這實際上比CodeDOM設施更接近反思。

+0

有沒有很多系列的文章可以引導我完成所有這些? – bitbonk 2010-04-23 11:13:45

+0

這篇文章(http://www.infoq.com/articles/expression-compiler)可能會有所幫助。 – 2010-04-23 11:22:32

+0

好的回答.... – nawfal 2013-10-12 15:07:13