il a à voir avec l'utilisation de la mémoire et des pointeurs. Vous avez une pile, et un tas lors de l'allocation de mémoire pour les objets, cette mémoire est l'un des tas. Votre variable saleItems est définie sur la pile et pointe vers l'adresse mémoire sur le tas. Votre dictionnaire est également sur la pile pointant vers le tas.
quand vous dites:
saleItems = new List<SaleItem>()
les saleItems variables est poussé sur la pile et contient une adresse mémoire les points à l'emplacement des données sur le tas. Disons 0x0100
. Maintenant, vous ajoutez un nouveau DictionaryItem
à votre dictionnaire. Le DictionaryItem
est placé sur le tas avec deux propriétés, clé et valeur. Dans ce cas, vous avez ajouté saleItems
comme Value
, de sorte que Value
a également l'adresse 0x0100
. Maintenant DictionaryItem.Value
pointe sur la même mémoire que saleItems. Lorsque vous appelez saleItems.Clear, vous dites trouver la liste à l'adresse 0x0100
et supprimer tous les éléments. Donc le dictionnaire et la variable deviennent vides parce qu'ils pointent sur la même mémoire. Ce que vous voulez faire est de dire saleItems = new List<SaleItem>();
encore. Maintenant, saleItems pointera vers une nouvelle adresse sur le tas (disons 0x0200
). DictionaryItem.Value
pointe toujours sur l'adresse mémoire 0x0100
afin que vous puissiez agir sur la variable saleItems
sans affecter les données dans votre dictionnaire.
Pour plus d'informations sur des piles et des tas de C# essayer cet article: http://www.c-sharpcorner.com/UploadFile/rmcochran/csharp_memory01122006130034PM/csharp_memory.aspx?ArticleID=9adb0e3c-b3f6-40b5-98b5-413b6d348b91
Je suppose que les listes sont de la même manière? – Dano
Oui, ils le sont. Toute personne qui modifie la référence le modifie pour tous ceux qui utilisent la référence. Pensez à la référence comme rien de plus qu'un pointeur vers la liste sous-jacente. – jjxtra
En parlant de cela, si vous voulez ajouter beaucoup de listes qui ne partagent pas la même référence, faites simplement "new List()" et ajoutez cela au dictionnaire chaque fois que vous avez besoin d'une nouvelle liste. –
jjxtra