我有一个关于LayoutKind.Explicit
属性集的结构的小问题。正如你所看到的,我声明了struct
,其中带有64位的fieldTotal
,最后32字节是fieldFirst
,前32字节是fieldSecond
。在将fieldfirst
和fieldSecond
设置为Int32.MaxValue
之后,我希望fieldTotal
为Int64.MaxValue
,这实际上不会发生。为什么是这样?我知道C#并不真的支持C++联合,也许它只会在调用时读取值,但是当我们尝试自己设置值时,它不会很好地处理它。如何在C#中模拟C++联合?
[StructLayout(LayoutKind.Explicit)]
struct STRUCT {
[FieldOffset(0)]
public Int64 fieldTotal;
[FieldOffset(0)]
public Int32 fieldFirst;
[FieldOffset(32)]
public Int32 fieldSecond;
}
STRUCT str = new STRUCT();
str.fieldFirst = Int32.MaxValue;
str.fieldSecond = Int32.MaxValue;
Console.WriteLine(str.fieldTotal); // <----- I'd expect both these values
Console.WriteLine(Int64.MaxValue); // <----- to be the same.
Console.ReadKey();
再加上Reed&Jared对签名和未签名的说法。 – 2009-07-21 23:37:18