スポンサーリンク

2015年4月24日金曜日

VB.NET で構造体に FieldInfo クラスを使用して値を設定する方法

 リフレクションを使ったオブジェクトに対する値の取得や設定で使用する PropertyInfo クラスや FieldInfo クラス。
 構造体は値型だけど、C# の場合は object 型に一度ボックス化して参照型に変換することで解決できる。

 だがしかし。

 VB.NET の場合は上手くいかない。内部でボックス化されたものが値型か参照型かを判定して処理しているため、結局ボックス化が無意味になっていまっている。

 じゃあ、VB.NET ではリフレクションを使って構造体に値を設定できないのか……。

 と、いろいろ調べてみたところ、ValueType クラスを経由することで解決できる模様。

Dim s As New S
Dim v As ValueType = s
Dim f As FiledInfo = s.GetType().GetField("Name")

f.SetValue(v, "Hoge2")

s = DirectCast(v, S)

 うん、やっぱり VB は好きになれない。

0 件のコメント:

コメントを投稿