.NET 4.5 представляет удобный интерфейс IReadOnlyDictionary<TKey, TValue>. A Dictionary<TKey, TValue> is-an IReadOnlyDictionary<TKey, TValue>, поэтому я могу просто передать первое, где требуется последнее.
Я не уверен в обратном пути: как мне создать новый Dictionary<,> на основе существующего IReadOnlyDictionary<,>?
-
Dictionary<,>имеет несколько конструкторов, которые принимаютIDictionary<,>, но ни один из них не принимаетIReadOnlyDictionary<,>. -
IReadOnlyDictionary<,>имеет метод расширенияToDictionary<,>(). Однако это унаследовано отIEnumerable<>. Поэтому, чтобы использовать его, я должен передать двух совершенно лишних делегатов, таких как:readOnlyDict.ToDictionary(pair => pair.Key, pair => pair.Value). Гадкий! - Конечно, я всегда могу создать новый
Dictionary<,>, перебрать исходные пары и скопировать их.
Мне кажется, что должен существовать тривиальный способ создания нового Dictionary<,> на основе существующего IReadOnlyDictionary<,>. Я что-то пропустил?
Изменить: Некоторые пояснения. Я не ищу какой-то волшебный способ лечения IReadOnlyDictionary<,> как Dictionary<,>. Я хочу создать новый Dictionary<,>, который копирует свои начальные значения из IReadOnlyDictionary<,>. Этот вопрос - это длинный вопрос:
Dictionary<,> имеет конструктор удобства для копирования начальных значений из IDictionary<,>. Почему у него нет одного, принимающего IReadOnlyDictionary<,> и какого самого идиоматического способа достижения одного и того же результата?