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
}
-----------------------------------
というものですが、当然これはビルドエラーとなります。

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

編集キー/

前の記事(元になった記事) 次の記事(この記事の返信)
親記事 →Re[1]: C#でunionを実現する方法 /Hongliang
→Re[1]: C#でunionを実現する方法 /魔界の仮面弁士
 
上記関連ツリー

C#でunionを実現する方法 / taro (21/02/16(Tue) 14:53) #96816 ←Now
Re[1]: C#でunionを実現する方法 / Hongliang (21/02/16(Tue) 15:04) #96818
Re[1]: C#でunionを実現する方法 / 魔界の仮面弁士 (21/02/16(Tue) 16:58) #96824
  ├ Re[2]: C#でunionを実現する方法 / taro (21/02/16(Tue) 18:05) #96826
  │└ Re[3]: C#でunionを実現する方法 / Hongliang (21/02/16(Tue) 19:02) #96828
  └ Re[2]: C#でunionを実現する方法 / 魔界の仮面弁士 (21/02/16(Tue) 18:35) #96827
    └ Re[3]: C#でunionを実現する方法 / 魔界の仮面弁士 (21/02/16(Tue) 19:09) #96829
      └ Re[4]: C#でunionを実現する方法 / 魔界の仮面弁士 (21/02/16(Tue) 19:36) #96830
        └ Re[5]: C#でunionを実現する方法 / taro (21/02/19(Fri) 13:43) #96856

上記ツリーを一括表示 / 上記ツリーをトピック表示
 
上記の記事へ返信