val = dict["nonexistent key"] を実行すると、System.Collections.Generic.KeyNotFoundException が発生します。値を生成するために、キーをパラメーターとして辞書でメンバー関数を呼び出す方法はありますか?
-編集- 多分私はもっと具体的であるべきだった. メンバー関数を自動的に呼び出して、そのキーの適切な値を作成する必要があります。この場合、DB にエントリを作成し、一意のハンドルを返します。以下に、私の解決策を投稿します。
val = dict["nonexistent key"] を実行すると、System.Collections.Generic.KeyNotFoundException が発生します。値を生成するために、キーをパラメーターとして辞書でメンバー関数を呼び出す方法はありますか?
-編集- 多分私はもっと具体的であるべきだった. メンバー関数を自動的に呼び出して、そのキーの適切な値を作成する必要があります。この場合、DB にエントリを作成し、一意のハンドルを返します。以下に、私の解決策を投稿します。
拡張メソッドを使用します。
static class DictionaryExtensions {
public static TValue GetValueOrDefault<TKey, TValue>(this Dictionary<TKey,TValue> dic, TKey key, Func<TKey, TValue> valueGenerator) {
TValue val;
if (dic.TryGetValue(key, out val))
return val;
return valueGenerator(key);
}
}
あなたはそれを呼び出すことができます:
dic.GetValueOrDefault("nonexistent key", key => "null");
またはメンバー関数を渡します。
dic.GetValueOrDefault("nonexistent key", MyMemberFunction);
Object value;
if(dict.TryGetValue("nonexistent key", out value))
{
// this only works when key is found..
}
// no exception is thrown here..
余談ですが、あなたが話しているテクニックはメモ化と呼ばれています