NotificationObject & UnaryMember - PullRequest
       9

NotificationObject & UnaryMember

1 голос
/ 22 июля 2011

Я видел множество реализаций INotifyPropertyChanged ( Автоматически INotifyPropertyChanged ), которые поддерживают UnaryExpression в дополнение к MemberExpression .Примеры UnaryExpression включают использование унарных операторов в выражении, таких как,

RiasePropertyChanged(() => !MyPropertyName);

. Достаточно ли причин, чтобы оправдать его включение в извлечение имени свойства?Я предполагал, что поддержка UnaryExpression заключается в том, что из этого можно извлечь MemberExpression .

Есть ли у сообщества какие-либо плюсы / минусы, связанные с этой реализацией, поскольку она отличается от Prism NotificationObject ?

1 Ответ

1 голос
/ 29 июля 2011

Я видел это только в тех случаях, когда кто-то хотел поддержать широкий спектр способов обращения к участнику.Ограничение UnaryExpression немного ограничивает вас.

Это на самом деле не имеет значения ... добавление поддержки для обоих будет в первую очередь проблемой производительности, но, скорее всего, в конечном итоге это не будет иметь большого значения.Я бы сказал, поддержите оба, просто чтобы вы не рисковали, если бы использование было более утечкой абстракции, чем это уже есть.

Вот что мы используем:

public void OnPropertyChanged<TProperty>(Expression<Func<TProperty>> property)
{
    var lambda = (LambdaExpression)property;
    MemberExpression memberExpression;

    if ( lambda.Body is UnaryExpression )
    {
      var unaryExpression = (UnaryExpression)lambda.Body;
      memberExpression = (MemberExpression)unaryExpression.Operand;
    }
    else
    {
      memberExpression = (MemberExpression)lambda.Body;
    }
    OnPropertyChanged(memberExpression.Member.Name);
}
...