我已经看到 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/