C#
ASP.NET

C#に動的型付けを導入する

動機

C#は静的型付け!!
なんだけど、型を定義するのがたまに面倒。
私、javascriptなんかも書くことがありますので、any型に親しみすぎてきつい。

対策

C#に動的型付けを導入する。

方法

DynamicObjectクラスとDictionaryクラスのdynamicコンボを使う。

コード

以下、簡略化したソースコード。
下記のクラスのインスタンス生成時にdynamicで変数を定義するのがポイント。

using System.Collections.Generic;
using System.Dynamic;

namespace Library
{
    public class ArgsObject : DynamicObject
    {
        private Dictionary<string, object> dictionary;

        public ArgsObject()
        {
            this.dictionary = new Dictionary<string, object>();
        }

        // プロパティに値を設定しようとしたときに呼ばれる
        public override bool TrySetMember(SetMemberBinder binder, object value)
        {
            this.dictionary[binder.Name] = value;
            return true;
        }

        // プロパティから値を取得しようとしたときに呼ばれる
        public override bool TryGetMember(GetMemberBinder binder, out object result)
        {
            result = this.dictionary[binder.Name];
            return true;
        }

        public bool ContainsKey(string key)
        {
            return this.dictionary.ContainsKey(key);
        }
    }
}

使用例

namespace Usage{
    public class UseDyanamic {
        public void a() {
            // ここでdynamicを使用することが大事
            dynamic args = new ArgsObject();
            args.AAA = "aaa";
            args.BBB = 1;
        }
    }
}

結論

超快適!!
ダックタイピング大好きです!!

※ご使用時にはかなりの注意が必要です。ご使用の際は、ご自身の判断のもとお願いいたします。また、try-catchなどはここでは記載しておりません。ご自身の判断で追加してください。

参考URL

公式で似たようなことしている。
https://code.msdn.microsoft.com/windowsdesktop/30-DynamicObject-dynamic-8d1ff1e4

Qiitaにも似たような記事があった。
https://qiita.com/NetSeed/items/0210cfe514b1bb24d651