我正在使用一个包含一些'cacheHelper'函数的库,这些函数充当System.Runtime.Caching
命名空间位的包装器。
例如:
public bool IsInCache(string keyname){
return MemoryCache[keyname] != null;
}
public static void SaveToCache(string cacheKey, object savedItem,
DateTime absoluteExpiration)
{
var policy = new CacheItemPolicy
{
AbsoluteExpiration = absoluteExpiration,
RemovedCallback = CacheEntryRemovedCallback
};
MemoryCache.Default.Add(cacheKey, savedItem, policy);
}
所有相当标准的东西。我们还有一个检索缓存对象的方法:
public static T GetFromCache<T>(string cacheKey) where T : class
{
return MemoryCache.Default[cacheKey] as T;
}
我发现如果我将一个对象作为X类型的对象保存到缓存中然后尝试从缓存中检索它,那么错误地,作为Y类型的对象,MemoryCache.Default[cachekey]
返回null并且没有异常是抛出。我期待像InvalidCastException
这样的东西。任何人都可以解释原因吗?
答案 0 :(得分:2)
当您使用Session.setTimeout()
时,它会在投射失败时将对象设置为as
,这就是为什么您还必须添加null
才能使用where T : class
因为您无法在as
上使用as
。要获得struct
,您必须进行直接投射。
InvalidCastException