为什么 MemoryCache 不抛出 InvalidCastException

本文关键字:InvalidCastException MemoryCache 为什么 | 更新日期: 2023-09-27 18:34:13

我正在使用一个包含一些"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这样的东西.谁能解释为什么?

为什么 MemoryCache 不抛出 InvalidCastException

当您使用as时,它会在强制转换失败时将对象设置为null,这就是为什么您还必须添加where T : class才能使用as,因为您不能在struct上使用as。要获得InvalidCastException您必须进行直接投射。

public static T GetFromCache<T>(string cacheKey) //The "where T : class" is no longer needed
{
    return (T)MemoryCache.Default[cacheKey];
}
相关文章:
  • 没有找到相关文章