我有一个用C#编写的函数,它在检查并插入缓存后返回business-entity(make)的集合。
public static Collection<CProductMakesProps> GetCachedSmartPhoneMake(HttpContext context)
{
var allMake = context.Cache["SmartPhoneMake"] as Collection<CProductMakesProps>;
if (allMake == null)
{
context.Cache.Insert("SmartPhoneMake", new CModelRestrictionLogic().GetTopMakes(), null,
DateTime.Now.AddHours(Int32.Parse(ConfigurationManager.AppSettings["MakeCacheTime"])),
Cache.NoSlidingExpiration);
allMake = context.Cache["SmartPhoneMake"] as Collection<CProductMakesProps>;
}
return allMake;
}
我在其他页面中使用它如下
var lobjprodMakeCol = CBrandCache.GetCachedSmartPhoneMake(Context);
//CBrandCache is the class which contain the method
我是否可能在lobjprodMakeCol
感谢。
修改
注意new CModelRestrictionLogic().GetTopMakes()
是一个从数据库中提取记录的函数
它将返回0或更多的收集天气。
答案 0 :(得分:1)
是的,如果演员as Collection<CProductMakesProps>
失败,那么将为allMake
分配一个null,因此这很大程度上取决于您从new CModelRestrictionLogic().GetTopMakes()
返回的内容。
基于大多数缓存和/或字典集合允许您检查特定密钥的存在的假设,我建议采用稍微简化的方式来编写此代码:
public static Collection<CProductMakesProps> GetCachedSmartPhoneMake(HttpContext context)
{
if (!context.Cache.ContainsKey("SmartPhoneMake") || context.Cache["SmartPhoneMake"] == null)
{
context.Cache.Insert("SmartPhoneMake"
, new CModelRestrictionLogic().GetTopMakes()
, null
, DateTime.Now.AddHours(Int32.Parse(ConfigurationManager.AppSettings["MakeCacheTime"]))
, Cache.NoSlidingExpiration);
}
return context.Cache["SmartPhoneMake"] as Collection<CProductMakesProps>;
}
答案 1 :(得分:1)
当你的函数返回null时,几乎没有可能 - 它们是
GetTopMakes
函数自我返回null MakeCacheTime
配置条目的值为零)as Collection<CProductMakesProps>
失败 - 如果GetTopMakes
可能
返回一些不同的类型。 我希望下面的版本在上述所有情况下都不会返回null
var allMake = context.Cache["SmartPhoneMake"] as Collection<CProductMakesProps>;
if (allMake == null)
{
allMake = new CModelRestrictionLogic().GetTopMakes();
context.Cache.Insert("SmartPhoneMake", allMake,
null, DateTime.UtcNow.AddHours(Int32.Parse(
ConfigurationManager.AppSettings["MakeCacheTime"])), Cache.NoSlidingExpiration);
}
return allMake;
另请注意,使用DateTime.UtcNow
可避免任何意外情况,例如日光节省等。