Как выставить частный словарь< K, V> Как коллекцию только для чтения?
Я подозреваю, что быстрого ответа на этот вопрос нет, но все равно спрошу.
У меня есть класс, который имеет:
private Dictionary<string,string> _records = new Dictionary<string,string>();
Я хотел бы предоставить это другому классу, но не хочу, чтобы этот другой класс мог каким - либо образом изменять словарь-то есть я не хочу, чтобы он мог назначить другой словарь, и я не хочу, чтобы он мог изменять содержимое существующего словаря.
Количество записей в словаре невелико-никогда не превышает низких десятков, - поэтому производительность не является проблемой.
Я не знаю, как получить версию компилятора, но я ориентируюсь на .NET 4.5.2. кажется, у меня есть весь современный синтаксис, о котором я читал, за некоторыми исключениями, такими как именованные поля кортежа, так что я думаю, что это ставит меня на C# 5 (или я могу говорить ерунду)?
Как лучше всего это сделать?
Кстати, в данном конкретном случае я обладаю достаточной гибкостью в отношении того, как взаимодействуют эти два класса. В частности, было бы прекрасно, если бы я мог просто вернуть неизменяемый
List<string>
о ключах в словаре. Тогда я мог бы просто добавить еще одну функцию, чтобы вернуть значение для указанного ключа.Я также мог бы бросить
Dictionary<string,string>
в целом.Что я уже пробовал:
Я довольно много гуглил на эту тему, но, похоже, там просто тонна противоречивой информации.
Разрешение какой-либо формы итерации по частной коллекции кажется настолько распространенным требованием, что я удивлен, что не нашел приемлемого шаблона или набора лучших практик для этого.
Richard MacCutchan
Вы можете либо добавить некоторые методы в свой класс, чтобы разрешить другому классу доступ к содержимому. Или создайте метод get, который возвращает временную копию словаря.
CHill60
Опереди меня! Виртуальная 5*
Richard MacCutchan
Ха, мои догадки быстрее твоих. :)