2012年12月18日
川俣晶の縁側ソフトウェア技術雑記 total 5721 count

珍しいC#のdynamicの利用例

Written By: 川俣 晶連絡先

 Windows LiveのSkyDriveのサンプルで見つけた珍しいC#のdynamicの利用例。

        private async void LoadProfile()

        {

            LiveConnectClient client = new LiveConnectClient(App.Session);

            LiveOperationResult liveOpResult = await client.GetAsync("me");

            dynamic dynResult = liveOpResult.Result;

            App.UserName = dynResult.name;

            LoadData();

        }

 liveOpResult.ResultはIDictionary<string,object>型ですが、IDictionary<string,object>型だから使えるコーディングパターン……というわけではなく、dynamic型でdynResult.nameと書いて通るようなオブジェクトを返しているから可能になるコード……のようですね。

 たぶんdynamicを使わないなら以下のコードと等価でしょう。

        private async void LoadProfile()

        {

            LiveConnectClient client = new LiveConnectClient(App.Session);

            LiveOperationResult liveOpResult = await client.GetAsync("me");

            //dynamic dynResult = liveOpResult.Result;

            //App.UserName = dynResult.name;

            App.UserName = (string)liveOpResult.Result["name"];

            LoadData();

        }

 ある程度以上は踏み込んでいないので良く分かりませんけどね!

感想 §

 書き換え後はキャストが入って間延びした……と思ったら、よく考えると書き換え前より短いですよね。いちいちdynamic型の変数も必要としていないし。