2016-01-21 3 views
-1

Я использую этот код в библиотеке проекта с использованием платформы .NET 4.5 и он работает отличноGetMemberInfo не найден при использовании .NET 4.5.2

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

скопировать-вставить этот код в проекте с помощью .NET Frameworkwith 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 
} 

Но я cusious: , где этот метод пошел?

+2

Возможный дубликат [Где найти GetMemberInfo] (http://stackoverflow.com/questions/20955547/where-to-find-getmemberinfo) – NikolaiDante

+0

@Nikolai no, вот где OP получил этот код. – CodeCaster

+1

@CodeCaster на самом деле это дубликат - такого метода нет, поэтому нужно создать новый. Просто случилось, что OP включил ответ дубликата в вопросе –

ответ

1

Expression<TDelegate> class не имеет метода GetMemberInfo(), и его никогда не было. Так что ваша проблема, кажется, лежит здесь:

Я копировать-вставить этот код в проекте

Так что для меня это выглядит, как ваша версия скомпилированной против 4,5 используется тот же или эквивалентный метод расширения, в противном случае он не был бы скомпилирован.

Смотрите, например this one from the Enterprise Library:

StaticReflection.GetMemberInfo<T, TProperty> Метод

Извлекает объект PropertyInfo для метода набора из выражения в виде х => x.SomeProperty.

Так что ваш исходный код должен иметь это в верхней части:

using Microsoft.Practices.EnterpriseLibrary.Common.Utility; 

И ссылки на библиотеки Enterprise Library.

+0

Действительно, я уже посмотрел '(расширение)', отображаемый во всплывающей подсказке, когда я наводил свойство с помощью мыши ... –

 Смежные вопросы

  • Нет связанных вопросов^_^