C# 缓存包含数据,但可以';无法检索数据
以下是我的代码:C# 缓存包含数据,但可以';无法检索数据,c#,.net,caching,C#,.net,Caching,以下是我的代码: List<Sale> sales = new List<Sale>(); if (Cache["Sales"] != null) { sales = (List<Sale>)Cache["Sales"]; } else { ... Cache.Add("Sales", sales, null, DateTime.Now.AddMinutes(20), Cache.NoSlidingExpiration
List<Sale> sales = new List<Sale>();
if (Cache["Sales"] != null)
{
sales = (List<Sale>)Cache["Sales"];
}
else
{
...
Cache.Add("Sales", sales, null, DateTime.Now.AddMinutes(20),
Cache.NoSlidingExpiration, CacheItemPriority.Normal, null);
}
List sales=newlist();
如果(缓存[“销售”]!=null)
{
销售=(列表)缓存[“销售”];
}
其他的
{
...
Cache.Add(“Sales”,Sales,null,DateTime.Now.AddMinutes(20),
Cache.NoSlidingExpiration,CacheItemPriority.Normal,null);
}
当我试图从缓存中提取数据时,我的“sales”对象为null。不知道为什么会命中这些代码,我在VS中运行了调试器以查看缓存对象中的内容
缓存包含我需要的数据,但当它从缓存中获取数据时,“sales”仍然显示为null
我有什么地方做错了吗
编辑:
我在施法时遇到以下错误:
[A] System.Collections.Generic.List1[controls\u mySales+Sale]不能强制转换为[B]System.Collections.Generic.List
1[controls\u mySales+Sale]。类型A源于“C:\WINDOWS\assembly\GAC_32\mscorlib\2.0.0_uB77A5C561934E089\mscorlib.dll”位置的上下文“LoadNone”中的“mscorlib,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089”。类型B源于“C:\WINDOWS\assembly\GAC_32\mscorlib\2.0.0\uu b77a5c561934e089\mscorlib.dll”位置的上下文“LoadNone”中的“mscorlib,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089”
MSDN的页面上指出:
as操作符就像一个演员
除了它在
转换失败而不是提升
例外
看起来这就是这里发生的情况——转换为typeList
失败,并返回null
。您确定这是缓存中对象的类型吗
编辑:
作为对您的编辑的回应,似乎与此相关的某种与程序集相关的序列化/反序列化问题有点超出了我的理解范围。我四处查看,发现以下两个问题,以便能够为您指出正确的方向:
希望这些链接能有所帮助。显然有两类
销售
它看起来像动态编译页面或用户控件中的嵌套类。在没有看到更多代码的情况下,很难准确地理解发生了什么,但是当页面/用户控件由于某种原因重新编译时,它可能会得到一个新类型
我会将Sale
类移出到它自己的源文件中自己的非嵌套类中。这是代码库中唯一一个为缓存键赋值的地方吗?您是否尝试过对List
进行强制转换,而不是使用as
操作符?可能有铸造问题。如果存储的是销售
而不是列表
,会发生什么?你有什么铸造错误?很好的研究。我已经编辑了显示抛出异常的原始帖子。你知道这有什么问题吗?这是一个已知的问题,更多信息