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
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
Curtir tópico
+ 0
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.
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
Clique aqui para fazer login e interagir na Comunidade :)