我正在寻找一种方法来获得任何对象的通用本地缓存。这里是代码:类型安全的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