-1

何が起こっているのかわかりません。

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わかりません。そのため、3回目の反復で変更すると、モデルにすでに保存されている値が変更されます。

紛らわしい場合は、教えてください。理解を深めるために修正を試みます。

4

3 に答える 3

2

あなたの i++ は外側の 'else' の中にあります。おそらく、foreach だけの中で 1 行下に置く必要があります。

これで、すべてのアイテムが「初めて」として扱われます。関連する行:

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

i常になります0

于 2013-02-13T17:56:21.223 に答える
1

問題はdialogTemp、これがオブジェクトの参照であると思います.作成したときdialog.Add(dialogTemp);(タイプまたはダイアログがわからないため推測しています)、オブジェクトを参照するだけで、新しいオブジェクトを作成していない場合、IDを変更しますdialogTemp.tipo = idTipoSendoVerificado;オブジェクトを再度追加するとdialog.Add(dialogTemp);、[0] と [1] で同じオブジェクトが参照されます。これは同じオブジェクトです。これは値パスではないため、参照パスであるため、オブジェクトを変更すると、オブジェクトが変更されます。彼のすべての参照。

これを解決するには、オブジェクトの新しいインスタンスを作成できます。新しい dialogTemp() を作成する必要があります...

于 2013-02-13T17:57:08.290 に答える
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
}
于 2013-02-13T18:00:24.700 に答える