読者です 読者をやめる 読者になる 読者になる

(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

keyが存在しない場合はデフォルト値を返すDictionaryの拡張メソッド【C#】【拡張メソッド】

C# 拡張メソッド

このエントリーをはてなブックマークに追加

はじめに

以下のように、Dictionaryで存在しないkeyでvalueを取得しようとすると

Dictionary<string, int> dict = new Dictionary<string, int>();
int tmp = dict["key"];


KeyNotFoundException: The given key was not present in the dictionary.

と例外が発生してしまいます。


こんな事が起きないようにTryGetValueというメソッドが用意されていますが、

Dictionary<string, int> dict = new Dictionary<string, int>();
int tmp = 10;
dict.TryGetValue("key", out tmp);


上記のように返り値でvalueを取得するわけでは無く、参照渡しで取得する上に、

keyが存在しない場合は、なぜかその型の規定値が設定されます。(上記の例だとtmpは0になる)


これだとかなり使い難いので、

keyが存在しない場合はデフォルト値を返すDictionaryの拡張メソッドを作りました。


DictionaryExtensions

その拡張メソッドが以下の通りです。



使い方は上記のDictionaryExtensions.csを作成し、

valueを取得する時にTryGetValueExを使用するだけです。

Dictionary<string, int> dict = new Dictionary<string, int>();
//tmpには10が入り、dictに<"key", 10>という値が設定される
int tmp = dict.TryGetValueEx("key", 10);


keyが存在しなければ、第二引数で指定したデフォルト値をDictionaryに登録し、それを返す

ようにしています。


またDictionary自体がnullの場合は

Dictionary<string, int> dict;
int tmp = dict.TryGetValueEx("key", 10);


拡張メソッド内で初期化しているので、エラーは出ません。