内存缓存通用列表删除无效缓存列表

Memory cached generic list removing without effect cached list

我正在尝试从我的 list.BUT 中删除一项,我正在从缓存中获取列表。 在此之后,我将删除我的功能中的一项。此删除影响我的缓存 list.If 我再次尝试从另一个页面的缓存中获取缓存列表。删除的项目丢失了,这怎么可能?

例子,

var IList list;
 if(condition)

 list=CacheManagement.GetFromCache();
 else
 list=SqlManagement.GetFromSql();


 list.removeall(x=>x.id==1);
 //end of my function

所以当你对列表进行更改时,它会反映到缓存中,这是因为引用(列表的内存地址)被复制到缓存中,所以任何更改实际上都会反映在缓存中。

要避免它,只需将列表的 Clone() 放入缓存即可。 (假设 UpdateCache() 是设置缓存的方法)你可以这样做:

UpdateCache(list.Clone());