我正在尋找一種方法來獲得任何對象的通用本地緩存。這裏是代碼:類型安全的C#通用緩存
private static readonly Dictionary<Type,Dictionary<string,object>> _cache
= new Dictionary<Type, Dictionary<string, object>>();
//The generic parameter allow null values to be cached
private static void AddToCache<T>(string key, T value)
{
if(!_cache.ContainsKey(typeof(T)))
_cache.Add(typeof(T),new Dictionary<string, object>());
_cache[typeof (T)][key] = value;
}
private static T GetFromCache<T>(string key)
{
return (T)_cache[typeof (T)][key];
}
1-有沒有辦法不使用getfromcache方法?
2-有沒有一種方法可以確保第二個字典中的類型安全,即所有的對象都有相同的類型。 (這是由addToCache方法提供的,但我更喜歡設計中的類型控制)。對於例如,有_cache以下類型的
Dictionary<Type,Dictionary<string,typeof(type)>>
THX
+1更好,因爲每種類型現在都有自己的「名稱空間」。缺點是,最好不要從多個線程中使用它。 – 2009-08-07 13:55:02
那麼,問題是關於類型安全性,而不是線程安全性。 公共靜態方法通常應該是線程安全的,所以需要在這裏添加鎖。 – Daniel 2009-08-07 14:02:22
我真的很喜歡這個解決方案! – Toto 2009-08-07 14:07:33