Duvida em List<t>

30/05/2012

0

Problema que não consegui entender

Criei um List de uma classe
List<Estoque> estoque = new List<Estoque>();
Estoque vest = new Estoque();

....
for (int i=0;i<retquery.Rows.Count;i++)
{
vest.Codigo = retquery.Rows[i][B2_COD].ToString();
vest.Local = retquery.Rows[i][B2_LOCAL].ToString();
vest.Saldo = Convert.ToDouble(retquery.Rows[i][B2_QATU]);
vest.Reserva = Convert.ToDouble(retquery.Rows[i][B2_RESERVA]);
estoque.Add(vest);
}


Aonde estou errando??

Se ele passar 4 vezes pelo for a lista estoque fica com quatro registros , mas os 4 com os mesmos dados

Ex:

For 1
estoque.Add( conteudo do vest = 5)
For 2
estoque.Add( conteudo do vest = 6)
For 3
estoque.Add( conteudo do vest = 8)
For 4
estoque.Add( conteudo do vest = 10)


estoque = {10,10,10,10}
deveria ser
estoque = {5,6,8,10}

Alguem pode me ajudar
Leonardo Carvalho

Leonardo Carvalho

Responder

Posts

30/05/2012

Thyago Benevides

em vez de fazer assim precisa fazer assim

List<Estoque> estoque = new List<Estoque>();
Estoque vest = null;

for (int i = 0; i < retquery.Rows.Count; i++) 
{
	vest = new Estoque()
	vest.Codigo = retquery.Rows[i][B2_COD].ToString();
	vest.Local = retquery.Rows[i][B2_LOCAL].ToString();
	vest.Saldo = Convert.ToDouble(retquery.Rows[i][B2_QATU]);
	vest.Reserva = Convert.ToDouble(retquery.Rows[i][B2_RESERVA]);
	estoque.Add(vest);
}
Responder

31/05/2012

Joel Rodrigues

Só uma explicação um pouquinho mais aprofundada, complementando a informação do amigo acima.
A classe Estoque é um chamado ´´tipo-referência´´, ou seja, quando você altera um objeto, está apenas alterando as posições da memória nas quais o objeto está alocado. No seu código, você instanciou o objeto vest uma única vez, ou seja, no loop você está usando sempre o mesmo objeto, mas com propriedades alteradas. Assim, quando você adiciona o objeto à lista na primeira iteração e altera suas propriedades na próxima, o objeto que foi adicionado à lista também é alterado. Desta forma, só persistirão as últimas alterações realizadas.
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar