Array
(
)

Duvida em List<t>

Leonardo Carvalho
   - 30 mai 2012

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

Thyago Benevides
|
MVP
    30 mai 2012

em vez de fazer assim precisa fazer assim

#Código
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);
}

Joel Rodrigues
   - 31 mai 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.