C# 内存缓存的通用列表删除而不影响缓存列表

C# 内存缓存的通用列表删除而不影响缓存列表,c#,memcached,generic-list,C#,Memcached,Generic List,我正在尝试从列表中删除一项。但是,我正在从缓存中获取列表。 在此之后,我将删除我的功能中的一项。这将影响我的缓存列表。如果我再次尝试从另一页的缓存中获取缓存列表。删除的项目丢失。这怎么可能 例如 var IList list; if(condition) list=CacheManagement.GetFromCache(); else list=SqlManagement.GetFromSql(); list.removeall(x=>x.id==1); //end o

我正在尝试从列表中删除一项。但是,我正在从缓存中获取列表。 在此之后,我将删除我的功能中的一项。这将影响我的缓存列表。如果我再次尝试从另一页的缓存中获取缓存列表。删除的项目丢失。这怎么可能

例如

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());

不,先生,你理解我错了也许我的解释是错的对不起。我只是从缓存中获取列表并在代码中编辑。编辑后我从不更新缓存。更新!我已经更新了我的问题,它是错误的。这就是为什么当你从缓存加载它回来。我知道,如果您愿意,我们可以在chatI继续讨论,我将非常高兴。当您从内存缓存中获取对象时,您正在编辑缓存中的实际对象,而不是它的副本。这就是为什么在代码中删除时,也会从缓存中的列表中删除该项。这种情况仅发生在内存缓存(堆内存)中,如果生产线中有多台服务器,则会导致缓存的一致性降低。