6
votes

L'objet de session change lorsque l'objet est mis à jour en C #

J'ai ce problème vraiment étrange et je suis sûr que je manque quelque chose d'évident ici. J'ai ces deux lignes:

int i = 0;
HttpContext.Current.Session["i"] = i;
i++;


0 commentaires

6 Réponses :



4
votes

Dans votre premier exemple, vous stockez une référence à l'objet (la liste des listes). Donc, si la liste code> est mise à jour, elle réfléchira à la session. Ceci est un type de référence.

Dans le deuxième exemple, vous utilisez une valeur Type: P>

int i = 0;
HttpContext.Current.Session["i"] = i;
i++;


0 commentaires

1
votes

Dans le premier exemple, votre variable de session pointe vers un référence afin qu'il soit mis à jour car les deux références indiquent la même valeur.

La deuxième variable de session pointe vers un type primitive (valeur) pour avoir des copies distinctes de la valeur.


0 commentaires

0
votes

la bonne voie doit être: xxx

le httpcontext.current.session ["i"] reste 1.


0 commentaires

1
votes

Dans le premier exemple, votre variable de session pointe vers une référence, il est donc mis à jour car les deux références indiquent la même valeur.

Donc avant de vous attribuer à la session, vous le convertissez en JSON, puis assignez P >

if (HttpContext.Current.Session[listModelType + "ListModel"] != null)
{

    listModel = JsonConvert.DeserializeObject<*CLASS name of lsitmodel*>((string)HttpContext.Current.Session[listModelType + "ListModel"]);

}


0 commentaires

0
votes

Dans le premier exemple, votre variable de session pointe vers une référence, il est donc mis à jour car les deux références indiquent la même valeur.

Donc avant de vous attribuer à la session, vous le convertissez en JSON, puis assignez P >

   if (HttpContext.Current.Session[listModelType + "ListModel"] != null) {

        listModel = JsonConvert.DeserializeObject<*CLASS name of lsitmodel*>((string)HttpContext.Current.Session[listModelType + "ListModel"]);

    }


0 commentaires