表达式树和PropertyDescriptor

时间:2011-11-01 13:30:41

标签: c# .net expression-trees typedescriptor propertydescriptor

是否有任何干净的方法从表达式树中获取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 个答案:

答案 0 :(得分:2)

这样的事情怎么样? (未经测试,抱歉!)

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);
}