c#不能在struct中有实例字段初始化器错误

本文关键字:字段 初始化 错误 实例 不能 struct | 更新日期: 2023-09-27 17:49:19

我是c#的新手,我有两个类。第一个类有一个公共结构,第二个类试图声明这个结构。我的英文不够好,但这是代码,以便您可以理解:

头等舱:

class PE
{
#region NT Headers
    [StructLayout(LayoutKind.Explicit)]
    public struct IMAGE_NT_HEADERS32
    {
        [FieldOffset(0)]
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
        public char[] Signature;
        [FieldOffset(4)]
        public IMAGE_FILE_HEADER FileHeader;
        [FieldOffset(24)]
        public IMAGE_OPTIONAL_HEADER32 OptionalHeader;
    }
    [StructLayout(LayoutKind.Explicit)]
    public struct IMAGE_NT_HEADERS64
    {
        [FieldOffset(0)]
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
        public char[] Signature;
        [FieldOffset(4)]
        public IMAGE_FILE_HEADER FileHeader;
        [FieldOffset(24)]
        public IMAGE_OPTIONAL_HEADER64 OptionalHeader;
    }
#endregion
}
第二类:
class Main
{
    struct NT_Header
    {
        Namespace.PE.IMAGE_NT_HEADERS32 INTSIGN = 
            new Namespace.PE.IMAGE_NT_HEADERS32(); //HERE IS THE ERROR!
    }
}

总是抛出错误…谢谢你的帮助!

c#不能在struct中有实例字段初始化器错误

你不能给struct字段赋一个默认值,就像你在NT_Header中所做的那样。这不是合法的c#。这将编译为:

class Main
{
struct NT_Header
    {
        public Namespace.PE.IMAGE_NT_HEADERS32 INTSIGN;
    }
}

c#编译器不允许值类型实例字段的内联初始化。但是,如果您需要初始化一个字段,则需要将其标记为"Static"。