2014-01-06 161 views
2

我已經找到了這個無處不在,我已經下載DLLLINQ Data並且也有在參考中添加System.Reflection,但它仍然無法找到它。哪裏可以找到GetMemberInfo

C#代碼:

protected void NotifyOfPropertyChanged(string name) 
{ 
     PropertyChangedEventHandler handler = PropertyChanged; 
     if (handler != null) 
     { 
      handler(this, new PropertyChangedEventArgs(name)); 
     } 
} 

protected void NotifyOfPropertyChanged<TProperty>(Expression<Func<TProperty>> property) 
{ 
     NotifyOfPropertyChanged(property.GetMemberInfo().Name); 
} 

在此行中出現的錯誤:

NotifyOfPropertyChanged(property.GetMemberInfo().Name); 

和錯誤讀取:

'System.Linq.Expressions.Expression<System.Func<TProperty>>' does not contain a definition for 'GetMemberInfo' and no extension method 'GetMemberInfo' accepting a first argument of type 'System.Linq.Expressions.Expression<System.Func<TProperty>>' could be found (are you missing a using directive or an assembly reference? 

回答

2
public static MemberInfo GetMemberInfo(this Expression expression) 
{ 
    var lambda = (LambdaExpression)expression; 

    MemberExpression memberExpression; 
    if (lambda.Body is UnaryExpression) 
    { 
     var unaryExpression = (UnaryExpression)lambda.Body; 
     memberExpression = (MemberExpression)unaryExpression.Operand; 
    } 
    else 
     memberExpression = (MemberExpression)lambda.Body; 

    return memberExpression.Member; 
} 
+0

@ScottChamberlain你怎麼把任何東西那裏不是'LambdaExpression'?我的意思是,這個方法怎麼能用於其他任何東西? –

+0

@HighCore這仍然不起作用。 – user3157821

+0

@ user3157821 *「這不起作用」*確實含糊不清。你能澄清一下嗎?你有例外嗎?如果是這樣,那是什麼?它在我的框架中工作。 –