Duvida em List<t>
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
Curtidas 0
Respostas
Thyago Benevides
30/05/2012
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); }
GOSTEI 0
Joel Rodrigues
30/05/2012
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.
GOSTEI 0