使用 .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
}
但我很可爱:这种方法去哪儿了?
Expression<TDelegate>
类没有方法GetMemberInfo()
,也从来没有。所以你的问题似乎就在这里:
我将此代码复制粘贴到项目中
所以对我来说,看起来你针对 4.5 编译的版本使用了相同或等效的扩展方法,否则它就不会编译。
例如,请参阅企业库中的以下内容:
StaticReflection.GetMemberInfo<T, TProperty>
方法从格式为 x => x.SomeProperty 的表达式中检索 set 方法的 PropertyInfo 对象。
所以你的原始代码应该在顶部有这个:
using Microsoft.Practices.EnterpriseLibrary.Common.Utility;
以及对企业库的引用。