.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-没错。但是,将您知道的是一个不可变字典的东西
传递给试图添加到字典中的方法可能也不是一个好主意。