使用operator []动态创建字典项

时间:2011-06-07 11:54:57

标签: c# dictionary operators

通常在创建Dictionary<Tkey, TValue>时,您必须首先通过在字典本身上调用add来添加k / v对。

我有一个Dictionary<string, mycontainer>,其中mycontainer是其他对象的容器。我需要能够快速地向mycontainer添加内容,所以我想也许我可以重载下标operator[]来动态创建mycontainer如果它还不存在然后允许我调用直接添加,如:

每次在字典中不存在具有所述名称的容器时,

mydictionnary["SomeName"].Add(myobject);无需显式创建mycontainer。

我想知道这是一个好主意还是我应该明确创建新的mycontainer对象?

3 个答案:

答案 0 :(得分:5)

你应该创建自己的包裹Dictionary<TKey, List<TItem>>的课程。

索引器看起来像这样:

public List<TItem> this[TKey key] {
    get {
        List<TItem> retVal;
        if (!dict.TryGetValue(key, out retVal))
            dict.Add(key, (retVal = new List<TItem>(itemComparer)));
        return retVal;
    }
}

答案 1 :(得分:1)

不妨myCustomClass.Add( key, subkey, value );这样可以很容易地理解代码,智能感知将指导它的使用。

答案 2 :(得分:0)

我会选择明确的代码 - 隐式重载索引器并不是一种常见的情况,并且可能会在几个月后咬人,其他人将会阅读您的代码。