none
Clone item de collection static. RRS feed

  • Pergunta

  • Boa tarde a todos.

    Estou com uma dúvida, poderiam me ajudar?

    public class MyItem { public List<string> SubItems {get; set;}

    public MyItem Clone()
    {
    return new MyItem(){SubItems = this.SubItems};
    } } public class MyClass : Dictionary<string, MyItem> { public static MyClass Current;

    public MyItem this[string key]
    {

    get
    {

    return base[key].Clone();

    }

    } }

    Por favor, não levem em consideração outros fatores para considerar ou não o item como threadsafe.

    A questão que me intriga, é quando solicitar MyItem sendo, MyClass.Current[key], MyItem neste caso, torna-se uma nova referência de memória, que absolutamente não irá sofrer concorrência, podendo então, add/remover SubItems sem qualquer preocupação?

    A resposta de vocês são de muito valor para que eu possa descartar erros que procuro na minha aplicação.


    []´s AlexVidotto - Web Developer - Pontue se útil ;]

    segunda-feira, 12 de novembro de 2012 20:15

Todas as Respostas

  • Bom dia Alex,

    com esta implementação o seu método Clone() está apenas referenciando os itens da coleção. Para realmente clonar a lista, você precisa realizar um Deep Clone, e para isso utilize o método Clone() do objeto (desde que ele implemente a interface ICloneable).

    Segue um exemplo:

    public MyItem Clone()
    {
      return new MyItem() { SubItems = this.SubItems.Select(i => i.Clone().ToString()).ToList<string>() };
    }

    Abraços,
    Daniel Cheida


    Daniel Cheida de Oliveira

    • Sugerido como Resposta Daniel Cheida sábado, 17 de novembro de 2012 10:51
    sábado, 17 de novembro de 2012 10:51