如何使用struct属性创建默认值?

我想知道如何将[DefaultValue]属性应用于struct属性。 您可以注意到Microsoft使用Form的大小和许多其他属性来完成它。 他们的值类型是Size,Point等。我想用自定义结构做同样的事情。

[DefaultValue(typeof(Point), "0, 0")] 

就是一个例子。 使用字符串初始化值是必要的恶魔,您可以在属性构造函数中使用的类型非常有限。 只有简单的值类型,字符串,类型和它们的一维数组。

要使其工作,您必须为您的结构编写TypeConverter:

 [TypeConverter(typeof(PointConverter))] [// etc..] public struct Point { // etc... } 

有关MSDN库中类型转换器的文档并不是很好。 使用.NET类型转换器,您可以使用参考源查看源代码或使用Reflector进行反向工程,这是一个很好的起点,可以让您自己开始工作。 注意文化顺便说一句。

[DefaultValue]属性仅适用于设计器/代码生成器/ etc。 你不能将它用于structsstructs中的值都是值类型,并且不支持默认构造函数。 创建struct对象时,它的所有属性/字段都设置为其默认值。 您无法更改此行为。

MSDN参考:

http://msdn.microsoft.com/en-us/library/system.componentmodel.defaultvalueattribute.aspx

备注:

您可以使用任何值创建DefaultValueAttribute。 成员的默认值通常是其初始值。 可视化设计器可以使用默认值来重置成员的值。 代码生成器也可以使用默认值来确定是否应该为成员生成代码。

注意:

DefaultValueAttribute不会导致使用属性的值自动初始化成员。 您必须在代码中设置初始值。

这取决于属性类型 – 您只能在属性中使用常量值,因此它必须是基本类型,字符串,枚举类型或在const上下文中有效的任何其他类型。

因此,如果您的属性是字符串,您只需执行以下操作:

 [DefaultValue("foo")] public string SomeProperty { get; private set; } 

请注意,这不会影响struct的默认构造函数的行为,它仍会将SomeProperty初始化为null; 此属性仅影响Visual Studio的属性窗格的行为。