2

val = dict["nonexistent key"] を実行すると、System.Collections.Generic.KeyNotFoundException が発生します。値を生成するために、キーをパラメーターとして辞書でメンバー関数を呼び出す方法はありますか?

-編集- 多分私はもっと具体的であるべきだった. メンバー関数を自動的に呼び出して、そのキーの適切な値を作成する必要があります。この場合、DB にエントリを作成し、一意のハンドルを返します。以下に、私の解決策を投稿します。

4

7 に答える 7

18

拡張メソッドを使用します。

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);
于 2009-04-05T09:07:14.660 に答える
14
Object value;
if(dict.TryGetValue("nonexistent key", out value))
{
    // this only works when key is found..
}
// no exception is thrown here..
于 2009-04-05T09:07:36.843 に答える
2

余談ですが、あなたが話しているテクニックはメモ化と呼ばれています

于 2009-04-06T09:46:54.167 に答える