2013-02-13 3 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++; 
    } 
} 

сейчас когда я печатаю значение dialog.tipo я должен получить [0]:46/[1]:44 Но я получаю [0]:44/[1]:44

Я не уверен, если это происходит потому, что значение передается в качестве ссылки так, когда я меняю idTipoSendoVerificado для третьего iteraction он изменяет alread сохраненное значение в модели.

Если это сбивает с толку, сообщите мне, и я попытаюсь исправить ситуацию для лучшего понимания.

+0

У вас есть (i! = 0)? – gabba

+0

Это действительно сбивает с толку. Попробуйте выполнить код в отдельном проекте и удалите строки, которые вам не нужны, чтобы показать проблему. Вы положили 'i ++' в то место, которое не будет достигнуто сейчас, и мы не знаем, что другой код может делать с побочными эффектами. Я также не уверен, откуда берутся 46, так как у вас есть 3 экземпляра какого-либо класса (укажите это тоже, пожалуйста), с 'idDocTipo' значениями 76, 76 и 74. –

ответ

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', вы, вероятно, хотите, чтобы он был на 1 строке ниже, внутри только 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], это тот же объект, потому что это не пропуск значения, это ссылочный проход, поэтому, если вы измените объект, по которому вы меняете объект во всех его ссылках.

Вы можете сделать новый экземпляр объекта для решения этой проблемы, вы должны сделать новый dialogTemp() ...

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