.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<,>
и какого самого идиоматического способа достижения одного и того же результата?