我有一个类的属性作为对象的任何更多的类。 例如:
public Class Humans { public Person Human {get; set;} [DefaulValue("New York")] public string Sity {get; set;} } public struct Person { [DefaulValue("Name")] public string Name {get; set;} [DefaulValue("Surname")] public string Surname {get; set;} }
如果我想重置人类,我写这个:
PropertyDescriptorCollection props = TypeDescriptor.GetProperties(Humans); foreach (PropertyDescriptor pr in props) { if (pr.Attributes.OfType<DefaultValueAttribute>().Any()) { pr.ResetValue(obj); } }
在财产的情况下,一切都完全发生Sity,对于财产人类什么也没有发生。 那么这里是如何重置为这些属性的默认值?
你不需要检查。 .Attributes
。 这里的关键是pr.CanResetValue(obj)
。 如果返回true
,则可以调用pr.ResetValue(obj)
。 如果返回false
,则不应该尝试。 支持重置有多种方法 – 包括:
[DefaultValue]
void Reset{membername}()
PropertyDesciptor
我建议你尝试添加:
void ResetHuman() { Human = null; }
然后你应该发现pr.CanResetValue(obj)
返回true
, pr.ResetValue(obj)
清除该值。