使用 .NET 4.5.2 时找不到 GetMemberInfo

本文关键字:找不到 GetMemberInfo NET 使用 | 更新日期: 2023-09-27 18:31:15

我正在使用框架 .NET 4.5 在库项目中使用此代码,它工作正常

protected void OnPropertyChanged<TProperty>(Expression<Func<TProperty>> property)
{
    if (this.IsInpcActive)
    {
        this.OnPropertyChanged(property.GetMemberInfo().Name);
    }
}

我使用 .NET Framework 与 4.5.2 将此代码复制粘贴到项目中,并收到以下错误消息:

'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?

由于我真的不想浪费太多时间,我找到了一个计划B:扩展方法:

internal static class ExpressionExtensions
{
    #region Methods
    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;
    }
    #endregion Methods
}

但我很可爱:这种方法去哪儿了?

使用 .NET 4.5.2 时找不到 GetMemberInfo

Expression<TDelegate>类没有方法GetMemberInfo(),也从来没有。所以你的问题似乎就在这里:

我将此代码复制粘贴到项目中

所以对我来说,看起来你针对 4.5 编译的版本使用了相同或等效的扩展方法,否则它就不会编译。

例如,请参阅企业库中的以下内容:

StaticReflection.GetMemberInfo<T, TProperty>方法

从格式为 x => x.SomeProperty 的表达式中检索 set 方法的 PropertyInfo 对象。

所以你的原始代码应该在顶部有这个:

using Microsoft.Practices.EnterpriseLibrary.Common.Utility;

以及对企业库的引用。