使用操作符[]动态创建字典项

发布于 2024-11-14 19:21:20 字数 492 浏览 2 评论 0 原文

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

我有一个 Dictionary ,其中 mycontainer 是其他对象的容器。我需要能够快速向 mycontainer 添加内容,所以我想也许我可以重载下标 operator[] 来动态创建一个 mycontainer (如果没有的话)已经存在,然后允许我直接在其上调用 add ,如下所示:

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

我想知道这是否是一个好主意,或者我应该显式创建新的 mycontainer 对象?

Normally when you create a Dictionary<Tkey, TValue> you have to first go and add k/v pairs by calling add on the dictionary itself.

I have a Dictionary<string, mycontainer> where mycontainer is a container of other objects. I need to be able to add things to the mycontainer quickly so I thought maybe I can overload the subscript operator[] to create a mycontainer on the fly if it doesn't already exist and then allowing me to call add on it directly, as such:

mydictionnary["SomeName"].Add(myobject); without explicitly having to go create mycontainer every time a container with the said name doesn't exist in the dictionary.

I wondered if this is a good idea or should I explicitly create new mycontainer objects?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

东走西顾 2024-11-21 19:21:20

您应该创建自己的类来包装 Dictionary>

索引器看起来像这样:

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;
    }
}

You should make your own class that wraps a Dictionary<TKey, List<TItem>>.

The indexer would look like this:

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;
    }
}
白鸥掠海 2024-11-21 19:21:20

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

Might as well do myCustomClass.Add( key, subkey, value ); so the code can be easily understood and intellisense will guide it's usage.

┊风居住的梦幻卍 2024-11-21 19:21:20

我会选择显式代码 - 索引器的隐式重载并不是真正常见的情况,并且可能会在几个月后当其他人阅读您的代码时出现问题。

I would go for explicit code - implicit overloading of an indexer is not really a common situation and will probably bite in a few months time when someone else will be reading your code.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文