Как написать геттер и сеттер для словаря?
=========================================

Как вы определяете метод получения и установки для сложных типов данных, таких как словарь?

Это возвращает весь словарь? Можете ли вы написать установщик, чтобы посмотреть и посмотреть, существует ли конкретная пара ключ-значение, а затем, если она не существует, добавить ее. Иначе обновить текущую пару ключ-значение? Для получения вы можете вернуть определенную пару ключ-значение вместо всего словаря?

theoretically Можно написать установщик, но для получателя вам потребуется указать ключ, который вы хотите получить. Это невозможно, поскольку свойства не принимают параметры. Естественный способ достичь желаемого - использовать методы:

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

И просто ради полноты, вот как может выглядеть сеттер, хотя очень необычно и нелогично иметь такое свойство:

Внутренне он использует`Set` метод из моего предыдущего фрагмента.



[один](https://codeblocks.codeplex.com/wikipage?title=Indexable%20sample&referringTitle=Home) способ сделать это с помощью C #.

Мой подход предоставляет свойство, которое возвращает объект (с индексатором по умолчанию), который будет выполнять индексацию в соответствующее поле с учетом лямбды, чтобы сделать это.

Есть причины, по которым вы можете или не хотите использовать этот метод, но я оставлю это вам. :)



is возможно сделать это с помощью установщика, но крайне не рекомендуется, и совершенно невозможно с получателем, так как для определения того, что получить, не требуется никаких параметров.

Для сеттера вы должны были бы пройти`Dictionary<string, string>` с одной парой, но это идет вразрез с тем, что вы обычно ожидаете от получателя / установщика, и полностью останавливает настройку всего словаря.

Гораздо лучший способ - использовать пару методов, которые вы можете назвать Get и Set, если хотите.



льзовать методы или добавить индексатор в свой класс.`get` Метод не может принять параметр (ключ).

Другой вариант, если вы хотите, чтобы кто-то мог легко добавлять / удалять ключи в словаре, но не позволял им устанавливать совершенно новый, было бы сделать свойство доступным только для чтения, которое возвращает словарь, созданный в конструкторе. Это было бы менее гибко, чем добавление методов get / set, но в простых простых случаях это может быть просто замечательно.



[MSDN](https://msdn.microsoft.com/en-us/library/6x16t2tx.aspx)):

Тогда используйте как: