我正在使用一個庫,其中包含一些'cacheHelper'函數,它們充當System.Runtime.Caching
命名空間的位的包裝。MemoryCache爲什麼不拋出InvalidCastException
例如:
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
。誰能解釋爲什麼?
您正在使用「as」關鍵字。 「as」將轉換類型,或者如果它不兼容,它將返回null。如果你想要一個異常,那麼使用一個強制轉換「(T)」,它會出錯。 – AndyJ
請參閱:http://stackoverflow.com/questions/132445/direct-casting-vs-as-operator – AndyJ
[文檔](https://msdn.microsoft.com/en-us/library/cscsdfbt.aspx)for '作爲' – juharr