为什么在创建后清除此结构?

Dav*_*own 0 c# struct

我有一个看起来像这样的结构:

[StructLayout(LayoutKind.Sequential)]
public struct in_addr {
    public Anonymous1 S_un;

    [StructLayoutAttribute(LayoutKind.Explicit)]
    public struct Anonymous1 {
        [FieldOffsetAttribute(0)]
        public Anonymous2 S_un_b;

        [FieldOffsetAttribute(0)]
        public Anonymous3 S_un_w;

        [FieldOffsetAttribute(0)]
        public uint S_addr;
    }

    [StructLayoutAttribute(LayoutKind.Sequential)]
    public struct Anonymous2 {
        public byte s_b1;
        public byte s_b2;
        public byte s_b3;
        public byte s_b4;
    }

    [StructLayoutAttribute(LayoutKind.Sequential)]
    public struct Anonymous3 {
        public ushort s_w1;
        public ushort s_w2;
    }

    public in_addr(byte[] address) {
        S_un.S_addr = (uint)BitConverter.ToInt32(address, 0);

        S_un.S_un_b.s_b1 = address[0];
        S_un.S_un_b.s_b2 = address[1];
        S_un.S_un_b.s_b3 = address[2];
        S_un.S_un_b.s_b4 = address[3];

        S_un.S_un_w.s_w1 = 0;
        S_un.S_un_w.s_w2 = 0;
    }
}
Run Code Online (Sandbox Code Playgroud)

当我尝试创建此结构的新实例时,每个字节字段都设置为0.

in_addr temp = new in_addr(bytes);
Run Code Online (Sandbox Code Playgroud)

我已经逐步完成了struct的构造函数,并验证了字节确实已分配给字段.但是当我走出构造函数并检查其值时temp,一切都为0.

是什么导致了这个?

Mik*_*len 5

由于这些线:

S_un.S_un_w.s_w1 = 0;
S_un.S_un_w.s_w2 = 0;
Run Code Online (Sandbox Code Playgroud)

它们通过映射到您的4个字节

[FieldOffsetAttribute(0)]
public Anonymous2 S_un_b;

[FieldOffsetAttribute(0)]
public Anonymous3 S_un_w;
Run Code Online (Sandbox Code Playgroud)