2017-01-26 38 views
6

是否存在(如果不在標準庫中,那麼可能作爲Nuget包)一個類,適合從C#使用,提供純粹的函數式字典?也就是說,在添加或刪除密鑰的位置,將返回一個新的字典,同時保留原來的字典不變?C#純功能字典

+6

Eh,'ImmutableDictionary '? https://msdn.microsoft.com/zh-cn/library/dn467181(v=vs.111).aspx當您操作不可變的字典時,將創建原始字典的副本,應用操作並返回新的不可變字典。 –

+3

您正在濫用「功能」一詞。您正在詢問一個只讀或不可變的字典。有些類提供了兩種行爲 –

回答

8

您正在尋找不變集合,ImmutableDictionary<TKey, TValue>

https://msdn.microsoft.com/en-us/library/dn467181(v=vs.111).aspx

當你操縱一個不變的詞典原 字典的副本被應用,並且新的不可變的 字典被返回。

+2

如果有人想知道只讀集合之間的區別,如[ReadOnlyDictionary](https://msdn.microsoft.com/en-us/library/gg712875(v = vs。 110).aspx)和像['ImmutableDictionary'](https://msdn.microsoft.com/en-us/library/dn467063(v = vs.111).aspx)這樣的不可變集合:前者不提供修改集合的方法,但它只是原始可修改集合的一個包裝,如果該集合發生更改,那麼只讀集合也會被修改。不可變集合不是包裝,它們不能被改變。 –

+2

...但他們提供的方法來修改它們,像['Add'](https://msdn.microsoft.com/en-us/library/dn466983(v = vs.111).aspx)到'string'方法,它們會返回一個新的已修改的不可變集合,但舊集合保持不變。 –

3

這個問題應該改爲「.NET是否有任何只讀或不可變的字典」?兩者的答案都是肯定的。

只讀字典功能由ReadOnlyDictionary類提供。

不變性意味着別的 - 這意味着即使另一個客戶對集合進行更改,一個客戶對集合的看法也不會改變。這是由ImmutableDictionary類提供