Я видел это только в тех случаях, когда кто-то хотел поддержать широкий спектр способов обращения к участнику.Ограничение 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);
}