Неизменный словарь <TKey, TValue> - PullRequest
1 голос
/ 25 марта 2011

Как бы вы реализовали конструкторы для неизменного Dictionary<TKey, TValue> -подобного класса?

Кроме того, можно ли разрешить пользователям использовать синтаксис:

ImmutableDic<int, int> Instance = new ImmutableDic<int, int> { {1, 2}, {2, 4}, {3,1} };

Ответы [ 2 ]

3 голосов
/ 25 марта 2011

Самое простое решение - написать конструктор, который принимает изменяемый IDictionary<TKey, TValue>. Создайте изменяемый словарь и просто передайте его конструктору неизменного словаря:

var data = new Dictionary<int, int> { {1, 2}, {2, 4}, {3,1} };
var instance = new ImmutableDic<int, int>(data);

Как объяснено в комментарии BoltClock, синтаксис инициализатора нельзя использовать с неизменным словарем, поскольку для него требуется метод Add.

1 голос
/ 25 марта 2011

Пусть конструктор примет IEnumerable<KeyValuePair<TKey, TValue>>.

Таким образом, вы можете сделать:

var Instance = new ImmutableDic<int, int>(
   new Dictionary<int, int> {1, 2}, {2, 4}, {3,1} });

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

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