使用运算符[]动态创建字典项

本文关键字:创建 字典 动态 运算符 | 更新日期: 2023-09-27 17:58:29

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

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

mydictionnary["SomeName"].Add(myobject);,而不必每次字典中不存在具有所述名称的容器时都显式地创建mycontainer。

我想知道这是个好主意,还是应该显式地创建新的mycontainer对象?

使用运算符[]动态创建字典项

您应该创建自己的类来包装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;
    }
}

还可以使用myCustomClass.Add( key, subkey, value );,这样代码就可以很容易地理解,intellisense将指导它的使用。

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