这是我的一些代码:
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);
}
当我尝试从缓存中提取数据时,我的“sales”对象为null。想知道为什么代码被击中,我在VS中运行调试器以查看Cache对象中的内容。
缓存包含我需要的数据,但是当它从缓存中获取数据时,“sales”仍然是null。
我在这里做错了吗?
修改
我在施法时收到此错误:
[A] {System.Collections.Generic.List {1}} 1 [controls_mySales +销售]。类型A源自位于'C:\ WINDOWS \ assembly \ GAC_32 \ mscorlib \ 2.0.0.0__b77a5c561934e089 \ mscorlib.dll'的上下文'LoadNeither'中的'mscorlib,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089' 。类型B源自'mscorlib,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'在上下文'LoadNeither'位置'C:\ WINDOWS \ assembly \ GAC_32 \ mscorlib \ 2.0.0.0__b77a5c561934e089 \ mscorlib.dll'
答案 0 :(得分:3)
as
keyword上的MSDN页面指出:
as 运算符就像一个演员 除了它产生null 转换失败而非提升 例外。
看起来这就是这里发生的事情 - 类型List<Sale>
的强制转换失败,并返回null
。您确定这是缓存中对象的类型吗?
修改强>
为了回应您的编辑,似乎某些与binding contexts相关的与程序集相关的序列化/反序列化问题可能真的有点过头了。我查了一下,在这里发现了以下两个问题,这些问题可能会指向正确的方向:
希望这些链接有用。
答案 1 :(得分:0)
答案 2 :(得分:0)
显然有两个班级Sale
。
它看起来像是动态编译的Page或UserControl中的嵌套类。如果没有看到更多代码,很难准确理解发生了什么,但是当由于某种原因重新编译Page / UserControl时,它会得到一个新类型。
我将Sale
类移到自己的源文件中的非嵌套类中。