1

我们将值存储在 Cache-Enterprise 库缓存块中。缓存项(即 List)的访问器会修改值。我们不希望缓存项目受到影响。

因此,首先我们返回一个新的 List(CachedItem 的 IEnumerator) 这确保访问器添加和删除项目对原始缓存项目几乎没有影响。

但是我们发现,我们返回给访问器的所有 List 实例都是 ALIVE 的!对象关系图显示了此列表和 EnterpriseLibrary.CacheItem 之间的关系。

所以我们把return改成了一个新克隆的List。为此,我们使用了 LINQ 说法(从数据中的项目选择新的 DataClass(item) ).ToList(),即使您按照上述方式执行操作,ORG 也会显示此列表与 CacheItem 之间存在关系。

我们不能做任何事情来创建企业库缓存中存在的列表项的克隆,它与缓存没有任何关系吗?!

4

2 回答 2

1

您必须对列表进行深度克隆,即添加列表中每个对象的克隆(并克隆它们可能包含的任何对象,我建议使用 Clone() 方法为您执行此操作),一个新的列表。如上所述,无论您复制多少次,参考都是参考。

于 2010-03-30T05:07:46.263 回答
0

这就是我们在将项目从缓存中拉出时克隆项目的方式。对象必须标记为可序列化。

        using (MemoryStream buffer = new MemoryStream())
        {
            BinaryFormatter formatter = new BinaryFormatter();
            formatter.Serialize(buffer, objectToClone);
            buffer.Position = 0;
            object temp = formatter.Deserialize(buffer);
            return temp;
        }
于 2014-02-14T17:22:01.417 回答