2008年7月24日木曜日

Nullable型とReflection

前回のエントリー「Nullable型のデータバインド」に関連して、ちょっとテスト。
テーマは、Null許可型のプロパティーにリフレクションを使用して、値を操作できるか?

まずは、int?型のプロパティーを持ったクラスを用意。

class Sample
{
private int? id;
public int? ID
{
get { return id; }
set { id = value; }
}
}



リフレクションによるアクセス

static void Main(string[] args)
{
PropertyInfo info = typeof(Sample).GetProperty("ID");

Sample sample = new Sample();
info.SetValue(sample, 1, null);
//ID:1
Console.WriteLine("ID:{0}", sample.ID);

info.SetValue(sample, null, null);
//False
Console.WriteLine(sample.ID.HasValue);

//True
Console.WriteLine(info.GetValue(sample,null) == null);

//ID:1
sample.ID = 1;
Console.WriteLine("ID:{0}", info.GetValue(sample, null));
}



拍子抜けするぐらい、予想通りにうまく行きました。これができるのになぜバインディングができない…

0 件のコメント: