我已经看到 INotifyPropertyChanged (Automatically INotifyPropertyChanged)的许多实现,除了 MemberExpression 之外,这些实现还支持 UnaryExpression UnaryExpression 的示例包括在表达式中使用一元运算符,例如,

RiasePropertyChanged(() => !MyPropertyName);

是否有足够的理由保证将其包含在属性(property)名称提取中?我以为对 UnaryExpression 的支持是因为您可以从中提取 MemberExpression

社区是否有与该实现相关的任何利弊,因为它与Prism NotificationObject 不同?

最佳答案

我只在有人想以多种方式推荐成员的情况下看到过这种情况。将其限制为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);
}

关于.net - NotificationObject和UnaryMember,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6793283/

10-15 17:49