Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 为什么是ImmutableDictionary<;TKey,TValue>;实施IDictionary<;TKey,TValue>;?_.net_Immutable Collections - Fatal编程技术网

.net 为什么是ImmutableDictionary<;TKey,TValue>;实施IDictionary<;TKey,TValue>;?

.net 为什么是ImmutableDictionary<;TKey,TValue>;实施IDictionary<;TKey,TValue>;?,.net,immutable-collections,.net,Immutable Collections,它看起来像是一个奇怪的设计选择,因为字典和不可变字典在写操作上是完全不同的。(读起来,它们都实现了IReadOnlyDictionary,这很好*) 事实上,ImmutableDictionary类中IDictionary.Add()的当前实现抛出了一个NewSupportedException 那么,这样做的意义何在?如果一个方法返回一个IDictionary,它实际上是一个ImmutableDictionary,例如,在其中添加元素时,您会遇到一些问题 *除了接口的名称,还有争议,所以文档完

它看起来像是一个奇怪的设计选择,因为
字典
不可变字典
在写操作上是完全不同的。(读起来,它们都实现了
IReadOnlyDictionary
,这很好*)

事实上,
ImmutableDictionary
类中
IDictionary.Add()
的当前实现抛出了一个
NewSupportedException

那么,这样做的意义何在?如果一个方法返回一个
IDictionary
,它实际上是一个
ImmutableDictionary
,例如,在其中添加元素时,您会遇到一些问题


*除了接口的名称,还有争议

,所以文档完全错了?我怀疑这是因为
ImmutableDictionary
可以很容易地放入代码中,而不必担心调用的方法采用
IDictionary
,即使它不会改变字典。否则他们将不得不做出更多的改变。这并不理想,但它(有点)务实@狗仔队确实,您提供的文档链接是错误的,反编译显示抛出了异常。请参阅@Sean:问题在于,在使用IDictionary.Add()方法的代码中,如果将具体的底层对象更改为不可变字典,则会引发异常,因此在运行时您会有一些顾虑。@VincentRipoll-没错。但是,将您知道的是一个
不可变字典的东西
传递给试图添加到字典中的方法可能也不是一个好主意。