C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


■96816 / )  C#でunionを実現する方法
□投稿者/ taro (19回)-(2021/02/16(Tue) 14:53:02)

分類:[C#] 

お世話になります。

C言語で以下のような、unionを含む構造体があります。
-----------------------------------
typedef struct{
float a;
float b;
float c;
float d;
}ST_1;

typedef struct{
float value1;
union{
ST_1 structData;
float valueArray[4];
};
}ST_2;
-----------------------------------

「structData.a」は「valueArray[0]」で、「structData.b」は「valueArray[1]」で参照できる、というものですが、
このような構造体定義をC#でかくにはどうすればよいでしょうか?
(そもそも可能でしょうか?)

パッと思い付いた方法としては
-----------------------------------
public struct ST_1
{
public float a;
public float b;
public float c;
public float d;
}

[System.Runtime.InteropServices.StructLayout(LayoutKind.Explicit)]
public struct ST_2
{
[System.Runtime.InteropServices.FieldOffset(0)]
public float value1;

[System.Runtime.InteropServices.FieldOffset(4)]
public ST_1 structData;

[System.Runtime.InteropServices.FieldOffset(4)]
float[] valueArray= new float[4]; // ←NG
}
-----------------------------------
というものですが、当然これはビルドエラーとなります。

よろしくお願いいたします。

返信 編集キー/


管理者用

- Child Tree -