Pergunta

Estamos tendo valores armazenados no bloco de cache da biblioteca de cache-Enterprise. Os acessores do item em cache, que é uma lista, modificam os valores. Não queríamos que os itens em cache fossem afetados.

Por isso, devolvemos uma nova lista (iEnumerator do CachedItem).

Mas descobrimos que todas as instâncias da lista que retornamos aos acessores estavam vivas! O gráfico relacional do objeto mostrou um relacionamento entre esta lista e o EnterPrisElibrary.cacheItem.

Então, mudamos o retorno para ser uma lista recém -clonada. Para isso, usamos um LINQ, digamos (do item em dados Selecione o novo Dataclass (item)) .Tolist () Mesmo quando você faz o que acima, a organização mostra que há uma relação entre esta lista e o CacheItem.

Não podemos fazer nada para criar um clone do item da lista que está presente no cache da biblioteca corporativa, que não tem nenhum relacionamento com o cache?!

Nenhuma solução correta

Outras dicas

Você teria que fazer um clone profundo da lista, ou seja, adicionar um clone de cada objeto na lista (e clonar todos os objetos que eles possam conter, sugiro ter um método clone () para fazer isso para você), para uma nova lista. Como foi comentado acima, uma referência é uma referência, não importa quantas vezes você a copie.

É assim que clonamos de itens ao retirá -los do cache. Os objetos devem ser marcados serializáveis.

        using (MemoryStream buffer = new MemoryStream())
        {
            BinaryFormatter formatter = new BinaryFormatter();
            formatter.Serialize(buffer, objectToClone);
            buffer.Position = 0;
            object temp = formatter.Deserialize(buffer);
            return temp;
        }
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top