質問

Ok、この共通の慣用法は、指定されるものを多用した時間(い):

class FooBarDictionary
{
    private Dictionary<String, FooBar> fooBars;

    ...

    FooBar GetOrCreate(String key)
    {
        FooBar fooBar;

        if (!fooBars.TryGetValue(key, out fooBar))
        {
            fooBar = new FooBar();
            fooBars.Add(key, fooBar);
        }

        return fooBar;
    }
}

ないようなのでしょうか。

ありクライアントまで、フルのC#でも"簡単に"転C++.そのためこのタグです。)

役に立ちましたか?

他のヒント

私はいつもこのような関数のobtainSomething()を呼び出します。

あなたはそれをやっている理由は、

これは一種の依存 - イディオムは、私が最初に使用する上で作成し、オンデマンドでメモ化、キャッシング、初期化と呼ばれることが見てきたものです。通常、私は、メソッド「ensureFoo」と呼ぶのではなく、「GetOrCreate」

私は、ハイレベルのパターンの全体的なプログラミングの名前がわからないんだけど、Perlはと呼ばれるこの素晴らしい振る舞いを持っていますAutovivification に - 。あなたは、ハッシュ非既存のキーの値を照会しているとき、すなわち、自動的に未定義の値を持つハッシュ(マップ)キーを作成する

クライアントまで、フルのC#...

...私のDefaultingDictionary<>なことがありますか?ボーナスパーツとして

  • を指定できますデフォルト値または 工場機能 価値創造がないためにキー:
  • で暗黙的に変換IDictionary<>(ラッピングの辞書)
  • で拡張方法に姿を変えずに辞書にDefaultingDictionary<>クラ

フルコード:

の拡張 .AsDefaulting 使用できる透過的に使用 IDictionary<> としてデフォルトからかもしれないけど、僕が選択でき用辞書についても例から得られた第三者のAPIとしてデフォルトが発生し、基になるコンテナまで更新されず自vivifiedいる。

利用しています

IDictionary<string, MyItem> dict = LoadFromDatabase();

// using a fixed value
SomeFunc(dict.AsDefaulting(defaultItem));

// using an independent generator function
var defaulting = dict.AsDefaulting(() => new MyItem { Id = System.Guid.NewGuid() });

// using a keydepedent generator function
var defaulting = dict.AsDefaulting(key => LazyLoadFromDatabase(key));

テストケース

を含む:

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top