2

データを一連の名前付きリストとして保存したいとしましょう。

私はあなたができる方法が本当に好きDictionaryです:

myDictionary["SomeKey"] = new List<string>{ "SomeString" };

しかし、残念ながら、私は安全に行うことができません:

myDictionary["SomeKey"].Add("SomeString");

ListatSomeKeyがまだ初期化されていない場合、 null 参照例外が発生するためです。

したがって、辞書の値を変更するたびに、次のことを行う必要があります。

if (!myDictionary.ContainsKey("SomeKey")) myDictionary["SomeKey"] = new List<string>();

各リストに安全に追加する前に。見栄えが悪く、ボイラープレート以外のコードから注意がそらされます。また、いくつかの場所でコードを複製します( 「空かどうかに関係なく、SomeKeyこの要素を のリストに追加する」ということだけを言いたいときに何度かアクセスします)。SomeKey

に初期化されていない値が必要な理由は基本的にありませんDictionary。の配列である場合、List事前にすべての要素をループして、各メンバーを初期化します。Dictionary事前にキーがどうなるかわからないので、これはできません。

「このキーの値にアクセスし、null の場合は初期化する」というより簡潔な構文はありますか?

4

1 に答える 1

3

あるとは思いませんが、必要に応じて拡張メソッドとして実行できます。何かのようなもの

public static class DictionaryExtensions
{
    public static SafeAdd(this Dictionary<string,List<string>> obj, string key, string val)
    {
        // your example code
    }
}

その後、あなたはすることができますmyDictionary.SafeAdd("somekey","somestring");

于 2012-12-12T05:51:01.560 に答える