mat*_*ule 21 .net c# immutable-collections
在C#中,这两个容器之间的关键区别(在功能或用例方面)是什么?似乎没有任何信息可以在Google上比较这些信息.
System.Collections.ObjectModel.ReadOnlyDictionary System.Collections.Immutable.ImmutableDictionary
我知道ImmutableDictionary是线程安全的.ReadOnlyDictionary也是如此吗?
Tim*_*ter 28
ReadOnlyDictionary可以通过构造函数初始化一次,然后你不能添加或删除它的项目(它们抛出NotSupportedExceptions).如果您希望确保在跨应用程序的多个层发送时不会对其进行修改,这将非常有用.ImmutableDictionary方法来修改它像Add或Remove,但他们将创建一个新的字典并返回,原始的字典保持不变,并返回新的不可变字典的副本.注意
ReadOnlyDictionary通过将另一个字典实例传递给构造函数来初始化.这解释了为什么a ReadOnlyDictionary是可变的(如果底层字典被修改).它只是一个保护免受直接更改的包装器.ImmutableDictionary:我如何创建一个新的ImmutableDictionary实例?这也解释了为什么ReadOnlyDictionary它不是线程安全的(更好的是:它与底层字典一样是线程安全的).这ImmutableDictionary是线程安全的,因为您无法直接或间接地修改原始实例."修改"它的所有方法实际上都返回一个新实例.
但是如果你需要一个线程安全的字典并且它不一定是不可变的,那就用一个ConcurrentDictionary代替.
AReadOnlyDictionary<TKey,TValue>是另一个现有实现对象的包装器IDictionary<TKey,TValue>。
重要的是,虽然“您”(有权访问 的代码ReadOnlyDictionary)无法通过包装器对字典进行任何更改,但这并不意味着其他代码无法修改底层字典。
因此,与其他答案可能暗示的不同,您不能假设ReadOnlyDictionary不受修改 - 只是不允许“您”进行修改。因此,例如,您无法确定两次访问特定密钥的尝试会产生相同的结果。
| 归档时间: |
|
| 查看次数: |
3017 次 |
| 最近记录: |