سؤال

لدي كائن متزامن أود تعيينه على كائن القاموس.

لا يُسمح بإلقاء بينهما. فكيف أفعل ذلك؟

هل كانت مفيدة؟

المحلول

ال 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);

لاحظ أن هذا يجعل ملف ينسخ. أنت لا تستطيع ما عليك سوى تخصيص اختصاصي في القاموس ، نظرًا لأن التزامن ليس نوعًا فرعيًا للقاموس. هذه هي النقطة الأساسية للواجهات مثل Idictionary: يمكنك تجريد الواجهة المطلوبة ("نوع من القاموس") من التنفيذ الملموس (Hashmap المتزامن/غير المتزامن).

أعتقد أنني وجدت طريقة للقيام بذلك.

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