在哪里找到GetMemberInfo?

3

我在各处查找,已经下载LINQ DataDLL文件并在引用中添加了System.Reflection,但仍然无法找到它。

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?
1个回答

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

@ScottChamberlain 你怎么能把不是“LambdaExpression”的任何东西放进去呢?我的意思是,这个方法怎么能在其他任何地方使用呢? - Federico Berasategui
“this doesn't work”实在是含糊且不够具体,请您详细说明。您是否遇到了异常?如果是,是什么异常?在我的框架中它是可以正常工作的。 - Federico Berasategui
@HighCore 抱歉,嗯,错误完全相同,没有改变。 - user3157821
@user3157821,你需要把这个 Extension Method 放到一个静态类里,并通过 using 指令来使用它。 - Federico Berasategui

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接