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

わんくま同盟

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

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


■96824 / )  Re[1]: C#でunionを実現する方法
□投稿者/ 魔界の仮面弁士 (2966回)-(2021/02/16(Tue) 16:58:40)
No96816 (taro さん) に返信
> 「structData.a」は「valueArray[0]」で、「structData.b」は「valueArray[1]」で参照できる、というものですが、
> このような構造体定義をC#でかくにはどうすればよいでしょうか?

fixed で代用してみるとか。


[StructLayout(LayoutKind.Sequential)]
public struct ST_1
{
 public float a;
 public float b;
 public float c;
 public float d;
}
[StructLayout(LayoutKind.Explicit)]
public unsafe struct ST_2
{
 [FieldOffset(0)] public float value1;
 [FieldOffset(4)] public ST_1 structData;
 [FieldOffset(4)] public fixed float valueArray[4];
}



class Program
{
 static unsafe void Main()
 {
  ST_2 x;
  x.value1 = 1.23f;
  x.structData.a = 2.34f;
  x.structData.b = 3.45f;
  x.structData.c = 4.56f;
  x.structData.d = 5.67f;
  Console.WriteLine(x.valueArray[0]);
  Console.WriteLine(x.valueArray[1]);
  Console.WriteLine(x.valueArray[2]);
  Console.WriteLine(x.valueArray[3]);

  x.valueArray[2] = 6.78f;
  Console.WriteLine($"structData.b = {x.structData.b}");
  Console.WriteLine($"structData.c = {x.structData.c}");
  Console.WriteLine($"structData.d = {x.structData.d}");

  Console.ReadKey();
 }
}
返信 編集キー/


管理者用

- Child Tree -