Problema/erro em C#

No F3aR

Power Member
Boas, estou com um ligeiro problema numa estrutura do tipo List<>. Será que me podem ajudar?

O codigo é o seguinte:

Código:
class manipulacaoReclamacoes
    {
        private string descricao;
        private string nomeAvatar;
        private string idAvatar
        private string data;
        private string nomeProduto;

        List<manipulacaoReclamacoes> lista = new List<manipulacaoReclamacoes> ();
        manipulacaoReclamacoes objt;
....

        public void preencheLista(ArrayList mensagens )
        {
            if(objt ==null)
                objt = new manipulacaoReclamacoes();
     
            foreach (string msg in mensagens)
            {
                int index = msg.IndexOf("\r\n\r\n");

                string str = msg.Substring(index);
                str = str.Trim();
                string[] str1 = str.Split(';');

                objt.descricao = str1[0];
                objt.nomeAvatar = str1[1];
                objt.idAvatar = str1[2];
                objt.data = str1[3];
                objt.nomeProduto = str1[4];

                lista.Add(objt); 
            }

Ora bem, a função preencheLista recebe um ArrayList que contem mensagens de email. A seguir no foreach cada mensagem de email vai ser separada e tratada, atraves da função Split, para assim retirar os campos que interessam de cada mensagem de email.
Cada instancia da classe assume o valor do campo do email separado pela função Split, no final o objecto objt com cada instancia preenchida, é adicionado ao fim da lista (lista.Add).

Agora, supondo que o ArrayList continha tres mensagens de email, a List deveria ter 3 objectos diferentes do tipo manipulacaoReclamacoes, ou seja, 3 "descricao" diferente, 3 nomeProduto diferente, etc..

O problema é que quando vizualizo o conteudo da List, constato que ela contem 3 objectos iguais, ou seja, por exemplo: apresenta-me 3 vezes o conteudo do ultimo objecto objt que lhe foi adicionado. (ou melhor, apresenta-me 3 vezes cada instancia da classe, mas com o valor do ultimo objt adicionado (List.Add)).

Será que me podem ajudar? :confused:

Obrigado a todos
 
Última edição pelo moderador:
Bem se a lista tem 3 objectos tudo com a ultima string que lhe mandas-te é pk não está a criar 3 objectos diferentes... Mas estás a actualizar referências que apontam para o mesmo objecto... Não sei se me fiz explicar... ou seja não existem 3 objectos mas apenas 1 e a lista tem 3 ponteiros para esse objecto... Verifica que se quando envias a string estás realmente a criar um novo objecto e quando estás a adicionar esse novo objecto o que está a entrar na lista é o correcto... e Já agora um arrayList não é o mesmo que uma List existe um método na list que passa uma lista para vector...

Código:
List<manipulacaoReclamacoes> lista = new List<manipulacaoReclamacoes> ();
        manipulacaoReclamacoes objt;
....

        public void preencheLista(ArrayList mensagens )
 
Essa classe está bastante "manhosa", mas continuando:

O erro está aqui:

manipulacaoReclamacoes objt;

e aqui:

if(objt ==null)
objt = new manipulacaoReclamacoes();

Ou seja.. estás sempre a colocar a alterar e a colocar o mesmo objecto dentro da lista... o que a lista guarda é a referência do objecto.. se o modificares a seguir, mudas sempre o mesmo objecto...

Solução.

Apagas esta linha: manipulacaoReclamacoes objt;

e em vez disto:

if(objt ==null)
objt = new manipulacaoReclamacoes();

colocas isto:

manipulacaoReclamacoes objt = new manipulacaoReclamacoes();
 
Última edição:
Obrigado aos dois, depois de me terem falado em Referencias, tive uma luzinha, pesquisei e descobri qual o problema. Esse mesmo, a lista apenas guarda referencias para o objecto, e como o objecto é sempre o mesmo.

Mas so uma ultima pergunta,
Essa classe está bastante "manhosa", mas continuando:

Porque achas que a classe está "manhosa"?
 
Back
Topo