2013-02-13 50 views
-1

我不知道發生了什麼。模型沒有得到更新裏面的foreach

docsRelacionadosModel是具有這種結構的模型:

docsRelacionadosModel.idDocTipo這是一個整數

並且具有那些elementes:[0]:76 , [1]:76, [2]:74

在此代碼:

int i = 0; 
foreach (var m in docsRelacionadosModel) 
{ 
    resultadoDialogModel dialogTemp = new resultadoDialogModel(); 
    if (i == 0) //FIRST TIME 
    { 
     idTipoSendoVerificado = m.idDocTipo; //HERE GETS '46' 

    } 
    else 
    { 
     // Here, first time is equal ([0]46 == [1]46) 
     if (m.idDocTipo == idTipoSendoVerificado) 
     { 
      //if there where no more element, but do not get here 
      if (i == (docsRelacionadosModel.Count() - 1)) 
      { 
       dialogTemp.tipo = m.idDocTipo; 
       dialog.Add(dialogTemp); 
      } 
     } 
     else //For the third and also the last time [1]46 != [2]44 
     { 
      dialogTemp.tipo = idTipoSendoVerificado; //Should be 46 
      dialog.Add(dialogTemp); //Save tempModel in model 
      idTipoSendoVerificado = m.idDocTipo; //Update id been verified 

      if (i == (docsRelacionadosModel.Count() - 1)) // And it is the last index 
      { 
       dialogTemp.tipo = idTipoSendoVerificado; //Here should be 44 
       dialog.Add(dialogTemp); //Save tempModel in model 
      } 
     } 
     i++; 
    } 
} 

現在當我打印的值我應該得到[0]:46/[1]:44 但我正在逐漸[0]:44/[1]:44

我不知道這是否是因爲該值作爲基準傳遞,因此當我改變idTipoSendoVerificado第三iteraction它改變在模型中alread保存的值。

如果它很混亂,請告訴我,我會嘗試修復以獲得更好的理解。

+0

你有(i!= 0)嗎? – gabba 2013-02-13 18:02:46

+0

這真是令人困惑。嘗試在單獨的項目中執行代碼,並刪除不需要顯示問題的行。你已經把'i ++'放在了一個現在不會被觸及的位置,我們不知道其他代碼可以用副作用做什麼。我也不確定46是從哪裏來的,因爲你有一些類的3個實例(請詳細說明),'idDocTipo'值爲76,76和74。 – 2013-02-13 18:09:40

回答

1

只需添加var dialogTemp2 = new resultadoDialogModel();,設置dialogTemp2.tipo = idTipoSendoVerificado;然後添加新的元素在dialog

if (i == (docsRelacionadosModel.Count() - 1)) // And it is the last index 
{ 
    var dialogTemp2 = new resultadoDialogModel(); 
    dialogTemp2.tipo = idTipoSendoVerificado; //Here should be 44 
    dialog.Add(dialogTemp2); //Save tempModel in model 
} 
2

你的i ++位於'else'外部,你可能想要它低一行,在foreach裏面。

您現在已將所有項目視爲「第一次」。相關線路:

int i = 0; 
foreach (var m in docsRelacionadosModel) 
{  
    if (i == 0) //FIRST TIME 
    { 
     ... 
    } 
    else 
    { 
     ... 
     i++; 
    } 
} 

i將永遠是0

1

我認爲問題是dialogTemp這是一個對象的引用,當你製作dialog.Add(dialogTemp);(我猜是因爲我不知道類型或對話框),你只是引用對象,你並沒有做出新的對象,你改變ID dialogTemp.tipo = idTipoSendoVerificado;並再次添加對象dialog.Add(dialogTemp);現在你有相同的對象在[0]和[1]中引用,是同一個對象,因爲不是一個值pass是一個引用傳遞,所以,如果你改變對象在你的所有引用中改變對象。

可以使對象的新實例來解決這個問題,你需要一個新的dialogTemp()...