かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

ExpandoObjectなんてものがあるんだ

C#4.0でdynamicキーワードが追加されてるけど、COMくらいにしか使わないのかなぁと思ってました。でも、ExpandoObjectというものの存在を知って、工夫の仕方によっては面白いものが出来そうだと思えてきた今日この頃です。

どんな動きをするクラスかというと

dynamic obj = new ExpandoObject();
// 適当にプロパティを書いても動く
obj.Property1 = "あああ";
obj.Hogehoge = "いいい";

// もちろん値の取得もできる
Console.WriteLine(obj.Property1); // あああ
Console.WriteLine(obj.Hogehoge); // いいい

こんな動きをします。このExpandoObjectはIDictionaryも継承しているので、IDictionaryとして使うとこんなこともできます。

dynamic o = new ExpandoObject();
// 適当にプロパティに値をセットして
o.Property1 = "あああ";
o.Hogehoge = "いいい";

// Dictionaryとして扱うこともできる
IDictionary<string, object> d = o;
foreach (var key in d.Keys)
{
    Console.WriteLine("{0} = {1}", key, d[key]);
}

実行結果は以下のようになります。

Property1 = あああ
Hogehoge = いいい

こいつは、どうやって使おう・・・!?