foreach内部的模型不会更新
本文关键字:更新 模型 内部 foreach | 更新日期: 2023-09-27 17:58:55
我不确定发生了什么。
docsRelacionadosModel
是具有以下结构的模型:
docsRelacionadosModel.idDocTipo
是整数
并具有以下元素:[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
时,它会更改模型中已读取的保存值。
如果它令人困惑,请告诉我,我会努力解决,以便更好地理解。
您的i++位于外部'else'内部,您可能希望它低一行,仅位于foreach内部。
现在,所有项目都被视为"第一次"。相关线路:
int i = 0;
foreach (var m in docsRelacionadosModel)
{
if (i == 0) //FIRST TIME
{
...
}
else
{
...
i++;
}
}
i
将始终是0
。
只需添加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
}
我认为问题是dialogTemp
,这是一个对象的引用,当你创建dialog.Add(dialogTemp);
时(我猜是因为我不知道类型或对话框),你只是引用了对象,而不是创建新对象,你更改了id dialogTemp.tipo = idTipoSendoVerificado;
,然后再次添加对象dialog.Add(dialogTemp);
,现在你在[0]和[1]中引用了相同的对象,是相同的对象,因为不是一个值传递是一个引用传递,所以,如果你改变了对象,你就改变了他所有引用中的对象。
你可以制作一个对象的新实例来解决这个问题,你需要制作一个新的dialogTemp()。。。