Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用struct属性生成默认值?_C#_Struct - Fatal编程技术网

C# 如何使用struct属性生成默认值?

C# 如何使用struct属性生成默认值?,c#,struct,C#,Struct,我想知道如何将[DefaultValue]属性应用于结构属性。您可以注意到,Microsoft是通过表单的大小和许多其他属性来实现的。它们的值类型是大小、点等。我希望对自定义结构执行相同的操作。这取决于属性类型——您只能在属性中使用常量值,因此它必须是基元类型、字符串、枚举类型或在const上下文中有效的任何其他类型 因此,如果您的属性是字符串,您只需执行以下操作: [DefaultValue("foo")] public string SomeProperty { get; private s

我想知道如何将[DefaultValue]属性应用于结构属性。您可以注意到,Microsoft是通过表单的大小和许多其他属性来实现的。它们的值类型是大小、点等。我希望对自定义结构执行相同的操作。

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

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

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

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

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

MSDN参考:

评论: 可以创建DefaultValueAttribute 有任何价值。会员违约 值通常是其初始值。 可视化设计器可以使用默认设置 值重置成员的值。 代码生成器可以使用默认值 值也可用于确定代码是否 应为成员生成

注: DefaultValueAttribute不会导致 要自动删除的成员 使用属性的 价值必须设置初始值 在你的代码中

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

要实现这一点,必须为结构编写类型转换器:

[TypeConverter(typeof(PointConverter))]
[// etc..]
public struct Point
{
   // etc...
}
MSDN库中关于类型转换器的文档不是很好。使用.NET类型的转换器,您可以使用参考源查看其源代码,或者使用Reflector进行反向工程,这是您自己工作的一个很好的起点。顺便说一句,注意文化

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