C# Struct-Layout.Explicit-Constructor-完全分配字段

C# Struct-Layout.Explicit-Constructor-完全分配字段,c#,struct,C#,Struct,如果我使用: struct MyStruct { [FieldOffset (0)] public uint Data; [FieldOffset (0)] public byte Something; } public MyStruct (uint pData) { Data = pData; // setting Data field also sets Something field } C#说我需要分配'Something'字段:/i我知道我可以

如果我使用:

struct MyStruct
{
        [FieldOffset (0)] public uint Data;
        [FieldOffset (0)] public byte Something;
}

public MyStruct (uint pData)
{
   Data = pData; // setting Data field also sets Something field
}
C#说我需要分配'Something'字段:/i我知道我可以做一个“构造函数:this()” 但编译器应该知道“数据”字段包含“某物”字段


因此,我应该首先调用无参数构造函数,这是唯一的方法吗?

如果定义自定义构造函数,则需要初始化结构的所有字段。有关更多信息,请参见structs中的MSDN教程-特别是在构造函数和继承标题下

以下是从该链接中摘录的与此相关的一段:

结构可以声明构造函数,但必须使用参数。为结构声明默认(无参数)构造函数是错误的。结构成员不能有初始值设定项。始终提供默认构造函数将结构成员初始化为其默认值


是的,您需要调用默认构造函数

public MyStruct (uint pData) : this()
{
   //...
}
然后,编译器将在构造函数的开头生成以下IL指令:

ldarg.0           // Push address of struct onto stack
initobj MyStruct  // Pop address of struct and initialize it with "all zeros"

似乎不可能,关于它的讨论已经结束:

以下是有关此问题讨论的链接:


我说的是别的。@zgnilec在这种情况下,我建议重新审视你的问题,因为它没有太多意义。好吧,也许其他人会理解我。这非常有用。这样做可以将代码的速度提高一纳秒或更多纳秒(取决于字段的数量)。