我正在将用C++编写的库翻译成C#,关键字"union"只存在一次.在结构中.
将它翻译成C#的正确方法是什么?它做了什么?它看起来像这样;
struct Foo { float bar; union { int killroy; float fubar; } as; }
Armin Ronach.. 76
您可以使用显式字段布局:
[StructLayout(LayoutKind.Explicit)] public struct SampleUnion { [FieldOffset(0)] public float bar; [FieldOffset(4)] public int killroy; [FieldOffset(4)] public float fubar; }
未经测试.这个想法是两个变量在你的结构中具有相同的位置.你当然只能使用其中一个.
关于结构教程中的联合的更多信息
您可以使用显式字段布局:
[StructLayout(LayoutKind.Explicit)] public struct SampleUnion { [FieldOffset(0)] public float bar; [FieldOffset(4)] public int killroy; [FieldOffset(4)] public float fubar; }
未经测试.这个想法是两个变量在你的结构中具有相同的位置.你当然只能使用其中一个.
关于结构教程中的联合的更多信息
如果不知道如何使用它,你无法真正决定如何处理它.如果它仅用于节省空间,那么您可以忽略它并只使用结构.
然而,这通常不是使用工会的原因.使用它们有两个常见的原因.一种是提供两种或更多种访问相同数据的方法.例如,int和4个字节数组的并集是分离出32位整数字节的一种(多种)方法.
另一种是结构中的数据来自外部源,例如网络数据包.通常,包含联合的结构的一个元素是一个ID,它告诉您联合的哪种风格有效.
在这两种情况下,你都不能盲目地忽略联合并将其转换为两个(或更多)字段不重合的结构.