Деревья выражений и PropertyDescriptor - PullRequest
1 голос
/ 01 ноября 2011

Есть ли какой-нибудь чистый способ получить PropertyDescriptor из дерева выражений?

У меня сейчас есть PropertyInfo, но в идеале я хочу PropertyDescriptor, мой код:

var prop = 
    (System.Reflection.PropertyInfo)
        ((MemberExpression)
            ((Expression<Func<TestClass, long>>)
                (p => p.ID)).Body).Member;

Мне нужен PropertyDescriptor, потому что мне нужно использовать:

if (prop.CanResetValue(this))
{
    prop.ResetValue(this);
}
else
{
    prop.SetValue(this, null);
}

Я не могу использовать PropertyInfo.SetValue(this, null, null), поскольку он не соответствует моим потребностям, так как мне нужно сбросить значение по умолчанию, указанное в DefaultValueAttribute.

1 Ответ

2 голосов
/ 01 ноября 2011

Как насчет этого? (Не проверено, извините!)

var prop = /* same as in your example above */

var descriptors = TypeDescriptor.GetProperties(this);
var descriptor = descriptors[prop.Name];

if (descriptor.CanResetValue(this))
{
    descriptor.ResetValue(this);
}
else
{
    descriptor.SetValue(this, null);
}
...