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

わんくま同盟

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

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

■96824 / 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();
 }
}
編集キー/

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

C#でunionを実現する方法 / taro (21/02/16(Tue) 14:53) #96816
Re[1]: C#でunionを実現する方法 / Hongliang (21/02/16(Tue) 15:04) #96818
C#でunionを実現する方法 / 魔界の仮面弁士 (21/02/16(Tue) 16:58) #96824 ←Now
  ├ 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

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