我已经实现了一个自定义类,并尝试通过调用PropertyDescriptor.ResetValue方法来设置其默认值。当我在互联网上进行一些研究时,我在msdn中看到了一个关于这种方法的链接,它的用法以及如何使用。
http://msdn.microsoft.com/en-us/library/system.componentmodel.propertydescriptor.resetvalue.aspx
根据这个链接,msdn文件说:
此方法确定要按以下优先顺序重置属性的值: 1-这家酒店有阴影酒店。 2-此属性有一个DefaultValueAttribute。 3-您已经实现了“ResetMyProperty”方法,其中“MyProperty”是您传递给它的属性的名称。
第二种方法不符合我的需要。另一方面,没有足够的第一和第三项使用样本。
你能解释一下特别是第三个吗?
答案 0 :(得分:1)
我不知道第一个选项(我怀疑它是在基类中声明一个属性和派生类中的“new”属性),但第三个看起来对我很简单:
public class Foo
{
public string Name { get; set; }
public Foo()
{
ResetName();
}
public void ResetName()
{
Name = "Some default value";
}
}
文档说,如果您在ResetValue
属性PropertyDescriptor
上调用Name
,则会调用该组件上的ResetName
方法。
我从未尝试过这个,但那是我的解释。
答案 1 :(得分:0)
你可以像这样检索(2)DefaultValueAttribute:
public class MyClass { [DefaultValue("my default value")] public string MyVar { get; set; } foreach (PropertyDescriptor descriptor in TypeDescriptor.GetProperties(typeof(MyClass))) string defaultValue = descriptor.Attributes.OfType<DefaultValueAttribute>().First().Value.ToString();