C# 中的 C 联合

新手上路,请多包涵

我正在将一个用 C++ 编写的库翻译成 C#,并且关键字“union”存在一次。在一个结构中。

将它翻译成 C# 的正确方法是什么?它有什么作用?它看起来像这样;

 struct Foo {
    float bar;

    union {
        int killroy;
        float fubar;
    } as;
}

原文由 Viktor Elofsson 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 723
2 个回答

您可以为此使用显式字段布局:

 [StructLayout(LayoutKind.Explicit)]
public struct SampleUnion
{
    [FieldOffset(0)] public float bar;
    [FieldOffset(4)] public int killroy;
    [FieldOffset(4)] public float fubar;
}

未经测试。这个想法是两个变量在你的结构中具有相同的位置。当然,您只能使用其中之一。

结构教程 中有关联合的更多信息

原文由 Armin Ronacher 发布,翻译遵循 CC BY-SA 2.5 许可协议

您可以编写一个简单的包装器,但在大多数情况下只使用一个对象就不会那么混乱了。

     public class MyUnion
    {
        private object _id;
        public T GetValue<T>() => (T)_id;
        public void SetValue<T>(T value) => _id = value;
    }

原文由 Kenneth Parker 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题