使用运算符[]动态创建字典项
本文关键字:创建 字典 动态 运算符 | 更新日期: 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将指导它的使用。
我会选择显式代码-索引器的隐式重载并不是一种常见的情况,而且可能会在几个月后其他人阅读你的代码。