Подтвердить что ты не робот

Как преобразовать ConcurrentDictionary в словарь?

У меня есть объект ConcurrentDictionary, который я хотел бы задать для объекта Dictionary.

Литье между ними запрещено. Итак, как мне это сделать?

4b9b3361

Ответ 1

Класс 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);

Ответ 2

Зачем вам нужно преобразовать его в словарь? ConcurrentDictionary<K, V> реализует интерфейс IDictionary<K, V>, этого недостаточно?

Если вам действительно нужен Dictionary<K, V>, вы можете скопировать его с помощью LINQ:

var myDictionary = myConcurrentDictionary.ToDictionary(entry => entry.Key,
                                                       entry => entry.Value);

Обратите внимание, что это делает копию. Вы не можете просто назначить ConcurrentDictionary для Словаря, поскольку ConcurrentDictionary не является подтипом словаря. То, что все точки интерфейсов, таких как IDictionary: вы можете абстрагировать желаемый интерфейс ( "какой-то словарь" ) от конкретной реализации (параллельный/неконкурентный хэш файл).

Ответ 3

Я думаю, что нашел способ сделать это.

ConcurrentDictionary<int, int> concDict= new ConcurrentDictionary<int, int>( );
Dictionary dict= new Dictionary<int, int>( concDict);

Ответ 4

ConcurrentDictionary<int, string> cd = new ConcurrentDictionary<int, string>();
Dictionary<int,string> d = cd.ToDictionary(pair => pair.Key, pair => pair.Value);