У меня есть объект ConcurrentDictionary, который я хотел бы задать для объекта Dictionary.
Литье между ними запрещено. Итак, как мне это сделать?
У меня есть объект ConcurrentDictionary, который я хотел бы задать для объекта Dictionary.
Литье между ними запрещено. Итак, как мне это сделать?
Класс ConcurrentDictionary<K,V>
реализует IDictionary<K,V>
, что должно быть достаточно для большинства требований. Но если вам действительно нужен конкретный Dictionary<K,V>
...
var newDictionary = yourConcurrentDictionary.ToDictionary(kvp => kvp.Key,
kvp => kvp.Value,
yourConcurrentDictionary.Comparer);
// or...
// substitute your actual key and value types in place of TKey and TValue
var newDictionary = new Dictionary<TKey, TValue>(yourConcurrentDictionary, yourConcurrentDictionary.Comparer);
Зачем вам нужно преобразовать его в словарь? ConcurrentDictionary<K, V>
реализует интерфейс IDictionary<K, V>
, этого недостаточно?
Если вам действительно нужен Dictionary<K, V>
, вы можете скопировать его с помощью LINQ:
var myDictionary = myConcurrentDictionary.ToDictionary(entry => entry.Key,
entry => entry.Value);
Обратите внимание, что это делает копию. Вы не можете просто назначить ConcurrentDictionary для Словаря, поскольку ConcurrentDictionary не является подтипом словаря. То, что все точки интерфейсов, таких как IDictionary: вы можете абстрагировать желаемый интерфейс ( "какой-то словарь" ) от конкретной реализации (параллельный/неконкурентный хэш файл).
Я думаю, что нашел способ сделать это.
ConcurrentDictionary<int, int> concDict= new ConcurrentDictionary<int, int>( );
Dictionary dict= new Dictionary<int, int>( concDict);
ConcurrentDictionary<int, string> cd = new ConcurrentDictionary<int, string>();
Dictionary<int,string> d = cd.ToDictionary(pair => pair.Key, pair => pair.Value);