gpt4 book ai didi

c# - ReadOnlyDictionary 和 ImmutableDictionary 有什么区别?

转载 作者:行者123 更新时间:2023-12-03 00:32:07 30 4
gpt4 key购买 nike

在 C# 中,这两个容器之间的主要区别(在功能或用例方面)是什么? Google 上似乎没有任何信息对这些内容进行比较。

System.Collections.ObjectModel.ReadOnlyDictionary System.Collections.Immutable.ImmutableDictionary

我知道 ImmutableDictionary 是线程安全的。 ReadOnlyDictionary 也是如此吗?

这不是 How to properly use IReadOnlyDictionary? 的重复项。这个问题是关于如何使用 IReadOnlyDictionary。这个问题是关于两者之间的区别(正如有人在 2015 年对该线程发表评论那样,这将是一个不同的问题 - 即这个)

最佳答案

  • 一个ReadOnlyDictionary可以通过构造函数初始化一次,然后您就无法从中添加或删除项目(它们会抛出 NotSupportedException)。如果您想确保它在跨应用程序的多个层发送时不会被修改,那么它非常有用。
  • ImmutableDictionary有方法可以修改它,例如 AddRemove,但它们将创建一个新字典并返回,原始字典保持不变,并返回新的不可变字典的副本.

请注意:

  • 通过将另一个字典实例传递给 constructor 来初始化 ReadOnlyDictionary 。这解释了为什么 ReadOnlyDictionary 是可变的(如果底层字典被修改)。它只是一个包装器,可以防止直接更改。
  • 您不能使用 ImmutableDictionary 的构造函数:How can I create a new instance of ImmutableDictionary?

这也解释了为什么ReadOnlyDictionary不是线程安全的(更好的是:它与底层字典一样线程安全)。 ImmutableDictionary线程安全的,因为您无法修改原始实例(无论是直接还是间接)。所有“修改”它的方法实际上都会返回一个新实例。

但是如果您需要一个线程安全的字典并且它不一定是不可变的,请使用 ConcurrentDictionary相反。

关于c# - ReadOnlyDictionary 和 ImmutableDictionary 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46911211/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com