質問: p.GetValue(hoge, null); // 構造体の中身を順次出力したい foreach(var v in val) { Console.WriteLine(v); /// 期待結果 /// a の値 /// b の値 /// c の値 } } ``` **現状について** デバッグを行うと、p.GetValue(hoge, null)で構造体内の要素自体は取得できているのですが、それを出力する方法がわかりません。 **試したことや推測について** 上記コードだとforeachで「IEnumerableに暗黙的に変換できません」とエラーが起きますが、これはvalの中身はMyStructのインスタンスしか入っていないためだと考えています。 ほかにも、GetPropertiesなど試しましたが、hugaの型は「dynamic{hoge}」となっていることから、Dynamicクラスのプロパティを取得してしまいます。 わかりづらくて申し訳ございませんがご回答の方お待ちしております。
回答: `[StructLayout(LayoutKind.Sequential, Pack = 1)]`が適用出来ているのか不明ですが、 以下のような変更で値の出力は出来るようになります。 `public struct MyStruct`の中身を以下に変更します。 (すべてに`public`と`{ get; set; }`を付ける) ``` public struct MyStruct { public int a { get; set; } public byte b { get; set; } public string c { get; set; } } ``` 処理の方は以下のように変更します。 ``` dynamic huga = new hoge(); // ここでプロパティは取得できている ? // 変更 hoge ではなく huga に, GetTypeには () を追記 var properties = huga.GetType().GetProperties(); foreach (PropertyInfo p in properties) { // ここで構造体の中身自体は取れてきている var val = p.GetValue(huga, null); // ----p が プリミティブか判定処理---- は順番を変更して上記の後で行う if (val.GetType().IsPrimitive) { Console.WriteLine(val); } else { // 外側のクラスと同じ処理を行う var props = val.GetType().GetProperties(); foreach (var prop in props) { object value = prop.GetValue(val, null); Console.WriteLine(value); } } } ```