2014-01-06 163 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 *“这不起作用”*确实含糊不清。你能澄清一下吗?你有例外吗?如果是这样,那是什么?它在我的框架中工作。 –