rksoftware

Visual Studio とか C# とかが好きです

構造体のプロパティに値をセットする

リフレクションを使って構造体のプロパティに値をセットする方法です。
クラスと同じように書いてはうまくいかなかったのでメモ。

■ 参照情報(答え)

ここを見ればすべてが解決します。

■ リンクをクリックするのが面倒な方へ

クラスと同じように書くと期待通りに行かない

Sample s = new Sample();
var type = typeof(Sample);
var p = type.GetProperty("PropA");
p.SetValue(s, "value");
Console.WriteLine(s.PropA); // 結果は null 期待通りにならない 

struct Sample
{
    public string PropA { get; set; }
}

期待通りの結果にする方法

構造体を Box 化します

Sample s = new Sample();
var type = typeof(Sample);
var p = type.GetProperty("PropA");
object o = (object)s;
p.SetValue(o, "value");
var s2 = (Sample)o;
Console.WriteLine(s.PropA); // 結果は null
Console.WriteLine(s2.PropA); // 結果は value 期待通り 

struct Sample
{
    public string PropA { get; set; }
}

ちょっとつらいですね。