執行緒安全的資料字典Dictionary
阿新 • • 發佈:2018-12-26
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime;
using System.Runtime.InteropServices;
using System.Runtime.Serialization;
using System.Security;
using System.Threading;
namespace Dictionary
{
/// <summary>
/// 執行緒安全的資料字典
/// </summary>
/// <typeparam name="TKey"></typeparam>
/// <typeparam name="TValue"></typeparam>
public class SynchronizedDictionary<TKey, TValue>
{
private Dictionary<TKey, TValue> dic=new Dictionary<TKey,TValue>();
private object obj = new object();
/// <summary>
/// 向字典中增加鍵值對
/// </summary>
/// <param name="key"></param>
/// <param name="value"></param>
public void Add(TKey key, TValue value)
{
lock (obj)
{
if(ContainsKey(key))
{
Remove(key);
}
dic.Add(key, value);
}
}
/// <summary>
/// 向字典中新增列表
/// </summary>
/// <param name="valueList"></param>
/// <param name="func"></param>
public void AddRange(ICollection<TValue> valueList, Func<TValue,TKey> 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);
}
}
}
}
/// <summary>
/// 清空資料字典
/// </summary>
public void Clear()
{
lock (obj)
{
dic.Clear();
}
}
/// <summary>
/// 從字典中移除特定的鍵值對
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public bool Remove(TKey key)
{
lock (obj)
{
return dic.Remove(key);
}
}
/// <summary>
/// 字典是否包含特定的鍵
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public bool ContainsKey(TKey key)
{
lock (obj)
{
return dic.ContainsKey(key);
}
}
/// <summary>
/// 字典是否包含特定的值
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
public bool ContainsValue(TValue value)
{
lock (obj)
{
return dic.ContainsValue(value);
}
}
/// <summary>
/// 字典中鍵值對的數目
/// </summary>
public int Count
{
get
{
lock (obj)
{
return dic.Count;
}
}
}
/// <summary>
/// 字典的鍵集合
/// </summary>
public Dictionary<TKey, TValue>.KeyCollection Keys
{
get
{
lock (obj)
{
return dic.Keys;
}
}
}
/// <summary>
/// 字典值集合
/// </summary>
public Dictionary<TKey, TValue>.ValueCollection Values
{
get
{
lock (obj)
{
return dic.Values;
}
}
}
/// <summary>
/// 字典鍵陣列
/// </summary>
public TKey[] KeysToArray
{
get
{
lock (obj)
{
TKey[] keys = new TKey[dic.Keys.Count];
dic.Keys.CopyTo(keys, 0);
return keys;
}
}
}
/// <summary>
/// 字典值陣列
/// </summary>
public TValue[] ValuesToArray
{
get
{
lock (obj)
{
TValue[] values = new TValue[dic.Keys.Count];
dic.Values.CopyTo(values, 0);
return values;
}
}
}
/// <summary>
/// 返回字典迴圈訪問的列舉
/// </summary>
/// <returns></returns>
public Dictionary<TKey, TValue>.Enumerator GetEnumerator()
{
lock (obj)
{
return dic.GetEnumerator();
}
}
/// <summary>
///
/// </summary>
public IEqualityComparer<TKey> Comparer
{
get
{
lock (obj)
{
return dic.Comparer;
}
}
}
/// <summary>
/// 通過key獲取特定的值
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public TValue this[TKey key]
{
get
{
lock (obj)
{
return dic[key];
}
}
set
{
lock (obj)
{
dic[key] = value;
}
}
}
///// <summary>
///// 獲取字典特定位置的值
///// </summary>
///// <param name="index"></param>
///// <returns></returns>
public TValue Value(int index)
{
lock (obj)
{
return ValuesToArray[index];
}
}
/// <summary>
/// 獲取字典特定位置的鍵
/// </summary>
/// <param name="index"></param>
/// <returns></returns>
public TKey Key(int index)
{
lock (obj)
{
return KeysToArray[index];
}
}
}
}
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime;
using System.Runtime.InteropServices;
using System.Runtime.Serialization;
using System.Security;
using System.Threading;
namespace Dictionary
{
/// <summary>
/// 執行緒安全的資料字典
/// </summary>
/// <typeparam name="TKey"></typeparam>
/// <typeparam name="TValue"></typeparam>
public class SynchronizedDictionary<TKey, TValue>
{
private Dictionary<TKey, TValue> dic=new Dictionary<TKey,TValue>();
private object obj = new object();
/// <summary>
/// 向字典中增加鍵值對
/// </summary>
/// <param name="key"></param>
/// <param name="value"></param>
public void Add(TKey key, TValue value)
{
lock (obj)
{
if(ContainsKey(key))
{
Remove(key);
}
dic.Add(key, value);
}
}
/// <summary>
/// 向字典中新增列表
/// </summary>
/// <param name="valueList"></param>
/// <param name="func"></param>
public void AddRange(ICollection<TValue> valueList, Func<TValue,TKey> 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);
}
}
}
}
/// <summary>
/// 清空資料字典
/// </summary>
public void Clear()
{
lock (obj)
{
dic.Clear();
}
}
/// <summary>
/// 從字典中移除特定的鍵值對
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public bool Remove(TKey key)
{
lock (obj)
{
return dic.Remove(key);
}
}
/// <summary>
/// 字典是否包含特定的鍵
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public bool ContainsKey(TKey key)
{
lock (obj)
{
return dic.ContainsKey(key);
}
}
/// <summary>
/// 字典是否包含特定的值
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
public bool ContainsValue(TValue value)
{
lock (obj)
{
return dic.ContainsValue(value);
}
}
/// <summary>
/// 字典中鍵值對的數目
/// </summary>
public int Count
{
get
{
lock (obj)
{
return dic.Count;
}
}
}
/// <summary>
/// 字典的鍵集合
/// </summary>
public Dictionary<TKey, TValue>.KeyCollection Keys
{
get
{
lock (obj)
{
return dic.Keys;
}
}
}
/// <summary>
/// 字典值集合
/// </summary>
public Dictionary<TKey, TValue>.ValueCollection Values
{
get
{
lock (obj)
{
return dic.Values;
}
}
}
/// <summary>
/// 字典鍵陣列
/// </summary>
public TKey[] KeysToArray
{
get
{
lock (obj)
{
TKey[] keys = new TKey[dic.Keys.Count];
dic.Keys.CopyTo(keys, 0);
return keys;
}
}
}
/// <summary>
/// 字典值陣列
/// </summary>
public TValue[] ValuesToArray
{
get
{
lock (obj)
{
TValue[] values = new TValue[dic.Keys.Count];
dic.Values.CopyTo(values, 0);
return values;
}
}
}
/// <summary>
/// 返回字典迴圈訪問的列舉
/// </summary>
/// <returns></returns>
public Dictionary<TKey, TValue>.Enumerator GetEnumerator()
{
lock (obj)
{
return dic.GetEnumerator();
}
}
/// <summary>
///
/// </summary>
public IEqualityComparer<TKey> Comparer
{
get
{
lock (obj)
{
return dic.Comparer;
}
}
}
/// <summary>
/// 通過key獲取特定的值
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public TValue this[TKey key]
{
get
{
lock (obj)
{
return dic[key];
}
}
set
{
lock (obj)
{
dic[key] = value;
}
}
}
///// <summary>
///// 獲取字典特定位置的值
///// </summary>
///// <param name="index"></param>
///// <returns></returns>
public TValue Value(int index)
{
lock (obj)
{
return ValuesToArray[index];
}
}
/// <summary>
/// 獲取字典特定位置的鍵
/// </summary>
/// <param name="index"></param>
/// <returns></returns>
public TKey Key(int index)
{
lock (obj)
{
return KeysToArray[index];
}
}
}
}