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.List
1[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操作符就像一个演员 除了它在 转换失败而不是提升 例外

看起来这就是这里发生的情况——转换为type
List
失败,并返回
null
。您确定这是缓存中对象的类型吗

编辑:

作为对您的编辑的回应,似乎与此相关的某种与程序集相关的序列化/反序列化问题有点超出了我的理解范围。我四处查看,发现以下两个问题,以便能够为您指出正确的方向:



希望这些链接能有所帮助。

显然有两类
销售

它看起来像动态编译页面或用户控件中的嵌套类。在没有看到更多代码的情况下,很难准确地理解发生了什么,但是当页面/用户控件由于某种原因重新编译时,它可能会得到一个新类型


我会将
Sale
类移出到它自己的源文件中自己的非嵌套类中。

这是代码库中唯一一个为缓存键赋值的地方吗?您是否尝试过对
List
进行强制转换,而不是使用
as
操作符?可能有铸造问题。如果存储的是
销售
而不是
列表
,会发生什么?你有什么铸造错误?很好的研究。我已经编辑了显示抛出异常的原始帖子。你知道这有什么问题吗?这是一个已知的问题,更多信息