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型の変数も必要としていないし。