Есть ли у C # способ дать мне неизменный словарь? - PullRequest
68 голосов
/ 29 августа 2008

Есть ли что-нибудь встроенное в основные библиотеки C #, которое может дать мне неизменный словарь?

Что-то вроде Java :

Collections.unmodifiableMap(myMap);

И просто чтобы уточнить, я не собираюсь останавливать изменение самих ключей / значений, просто структуру словаря. Я хочу что-то, что не работает быстро и громко, если любой из методов мутатора IDictionary вызван (Add, Remove, Clear).

Ответы [ 13 ]

1 голос
/ 02 февраля 2009

Здесь я нашел реализацию неизменяемой (не READONLY) реализации AVLTree для C #.

Дерево AVL имеет логарифмическую (не постоянную) стоимость для каждой операции, но все еще быстро.

http://csharpfeeds.com/post/7512/Immutability_in_Csharp_Part_Nine_Academic_Plus_my_AVL_tree_implementation.aspx

1 голос
/ 29 августа 2008

«Из коробки» нет способа сделать это. Вы можете создать его, создав собственный класс Dictionary и применив необходимые ограничения.

0 голосов
/ 30 октября 2010

Есть также другая альтернатива, как я описал в:

http://www.softwarerockstar.com/2010/10/readonlydictionary-tkey-tvalue/

По сути, это подкласс ReadOnlyCollection>, который выполняет работу более элегантно. Элегантный в том смысле, что он имеет поддержку во время компиляции, чтобы сделать Словарь доступным только для чтения, а не генерировать исключения из методов, которые изменяют элементы в нем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...