2015-07-16 2 views
0

Я использую List<> в C#. Я хочу добавить значения в List. Но проблема в том, что первый элемент успешно добавляется, но когда второй элемент вставляет одно и то же значение ovverride в первый, пример первый элемент abc вставлен успешно, но когда второй пункт xyz пришел, он овердиде abc до xyz, и оба пункта показывают xyz. Вот мой код.новый элемент, добавляющий в список, переопределяющий предыдущий

DataTable dtbl3 = new DataTable(); 
List<CartItems> lst = (List<CartItems>)Session["mycart"]; 
dtbl3 = DAL.Get("Select * from mytable"); 
List<EmailClass> lstCstmer = new List<EmailClass>(); 
for (int j = 0; j < lst.Count; j++) 
{   
    emailLst.__EmailcstName = dtbl3.Rows[0]["cstm_name"].ToString(); 
    emailLst.__EmailcstLName = dtbl3.Rows[0]["cstm_LName"].ToString(); 
    emailLst.__EmailcstAddress = dtbl3.Rows[0]["cstm_Addr"].ToString(); 
    emailLst.__EmailcstPhoneNo = dtbl3.Rows[0]["cstm_Phone"].ToString(); 
    emailLst.__EmailcstCellNo = dtbl3.Rows[0]["cstm_CellNo"].ToString(); 
    emailLst.__EmailcstskypId = dtbl3.Rows[0]["cstm_skypeId"].ToString(); 
    emailLst.__EmailcstEmail = dtbl3.Rows[0]["cstm_email"].ToString(); 
    emailLst.__EmailcstCountry = dtbl3.Rows[0]["cstm_country"].ToString(); 
    emailLst.__EmailcstCity = dtbl3.Rows[0]["cstm_City"].ToString(); 
    emailLst.__EmailcstZipcode =Convert.ToInt32(dtbl3.Rows[0]["cstm_ZipCode"].ToString()); 
    emailLst.__EmailcstRemarks = dtbl3.Rows[0]["cstm_remarks"].ToString();  
    emailLst._EmailCartProdName = lst[j]._CartProdName; 
    emailLst._EmailCartProdPrice = lst[j]._CartProdPrice; 
    emailLst._EmailCartProdQnty = lst[j]._CartProdQnty; 
    emailLst._EmailCartProdCode = lst[j]._CartProdName; 
    emailLst._EmailTotalProdPrice = lst[j]._TotalProdPrice; 
    lstCstmer.Add(emailLst);   
} 
+0

Где вы инициализировать экземпляр 'emailLst'? – Shaharyar

+0

http://stackoverflow.com/questions/13659284/c-sharp-list-overwrite-issue, http://stackoverflow.com/questions/2156482/why-does-adding-a-new-value-to-list -overwrite-previous-values-in-the-list, http://stackoverflow.com/questions/19156612/ilist-add-overwriting-existing-data и т. д. Поиск в Интернете для «C# loop list add overwrite», и вы найдете много результатов. – CodeCaster

+0

@Shaharyar emailLst - это класс класса –

ответ

2

Вы хотите добавить тот же элемент снова и снова, и потому что это ссылочный тип записи в точке списка в одном экземпляре EmailClass.

Создать новый экземпляр в каждой итерации цикла, чтобы исправить, что:

for (int j = 0; j < lst.Count; j++) 
{ 
    emailLst = new EmailClass(); 

    emailLst.__EmailcstName = dtbl3.Rows[0]["cstm_name"].ToString(); 
    emailLst.__EmailcstLName = dtbl3.Rows[0]["cstm_LName"].ToString(); 
    emailLst.__EmailcstAddress = dtbl3.Rows[0]["cstm_Addr"].ToString(); 
    emailLst.__EmailcstPhoneNo = dtbl3.Rows[0]["cstm_Phone"].ToString(); 
    emailLst.__EmailcstCellNo = dtbl3.Rows[0]["cstm_CellNo"].ToString(); 
    emailLst.__EmailcstskypId = dtbl3.Rows[0]["cstm_skypeId"].ToString(); 
    emailLst.__EmailcstEmail = dtbl3.Rows[0]["cstm_email"].ToString(); 
    emailLst.__EmailcstCountry = dtbl3.Rows[0]["cstm_country"].ToString(); 
    emailLst.__EmailcstCity = dtbl3.Rows[0]["cstm_City"].ToString(); 
    emailLst.__EmailcstZipcode =Convert.ToInt32(dtbl3.Rows[0]["cstm_ZipCode"].ToString()); 
    emailLst.__EmailcstRemarks = dtbl3.Rows[0]["cstm_remarks"].ToString(); 

    emailLst._EmailCartProdName = lst[j]._CartProdName; 
    emailLst._EmailCartProdPrice = lst[j]._CartProdPrice; 
    emailLst._EmailCartProdQnty = lst[j]._CartProdQnty; 
    emailLst._EmailCartProdCode = lst[j]._CartProdName; 
    emailLst._EmailTotalProdPrice = lst[j]._TotalProdPrice; 

    lstCstmer.Add(emailLst); 

} 
+0

Thank You Soo much –

Смежные вопросы