Вопрос

У меня есть объект condurentdictionary, который я хотел бы установить на словарный объект.

Кастинг между ними не допускается. Так как мне это сделать?

Это было полезно?

Решение

А 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);

Обратите внимание, что это делает копия. Анкет Ты не можешь Просто назначьте совместное использование словаря, так как Concurrentictictionary не является подтипом словаря. В этом вся смысл интерфейсов, таких как Иддеарь: вы можете абстрагировать желаемый интерфейс («какой-то словарь») из конкретной реализации (одновременная/неконкурентная хэшмапа).

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

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);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top