using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Api.Framework.Tools { /// /// 线程安全的数据字典 /// /// /// public class SynchronizedDictionary { private Dictionary dic = new Dictionary(); private object obj = new object();         ///         /// 向字典中增加键值对         ///         ///         ///         public void Add(TKey key, TValue value) { lock (obj) { if (ContainsKey(key)) { Remove(key); } dic.Add(key, value); } }         ///         /// 向字典中添加列表         ///         ///         ///         public void AddRange(ICollection valueList, Func func) { lock (obj) { if (func != null) { TKey key = default(TKey); foreach (var item in valueList) { key = func(item); if (ContainsKey(key)) { dic.Remove(key); } dic.Add(key, item); key = default(TKey); } } } }         ///         /// 清空数据字典         ///         public void Clear() { lock (obj) { dic.Clear(); } }         ///         /// 从字典中移除特定的键值对         ///         ///         ///         public bool Remove(TKey key) { lock (obj) { return dic.Remove(key); } }         ///         /// 字典是否包含特定的键         ///         ///         ///         public bool ContainsKey(TKey key) { lock (obj) { return dic.ContainsKey(key); } } ///         /// 字典是否包含特定的值         ///         ///         /// public bool ContainsValue(TValue value) { lock (obj) { return dic.ContainsValue(value); } } ///         /// 字典中键值对的数目         /// public int Count { get { lock (obj) { return dic.Count; } } }         ///         /// 字典的键集合         ///         public Dictionary.KeyCollection Keys { get { lock (obj) { return dic.Keys; } } }         ///         /// 字典值集合         ///         public Dictionary.ValueCollection Values { get { lock (obj) { return dic.Values; } } }         ///         /// 字典键数组         ///         public TKey[] KeysToArray { get { lock (obj) { TKey[] keys = new TKey[dic.Keys.Count]; dic.Keys.CopyTo(keys, 0); return keys; } } }         ///         /// 字典值数组         ///         public TValue[] ValuesToArray { get { lock (obj) { TValue[] values = new TValue[dic.Keys.Count]; dic.Values.CopyTo(values, 0); return values; } } } ///         /// 返回字典循环访问的枚举         ///         /// public Dictionary.Enumerator GetEnumerator() { lock (obj) { return dic.GetEnumerator(); } } ///         ///          /// public IEqualityComparer Comparer { get { lock (obj) { return dic.Comparer; } } }         ///         /// 通过key获取特定的值         ///         ///         ///         public TValue this[TKey key] { get { lock (obj) { return dic[key]; } } set { lock (obj) { dic[key] = value; } } }         /////         ///// 获取字典特定位置的值         /////         /////         /////         public TValue Value(int index) { lock (obj) { return ValuesToArray[index]; } }         ///         /// 获取字典特定位置的键         ///         ///         ///         public TKey Key(int index) { lock (obj) { return KeysToArray[index]; } } } }