かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

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 = いいい

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