7
votes

"Stockage" Types de valeur à l'intérieur d'une arracheListe

Le tableau code> La classe code> ne peut contenir que des références aux objets, mais que se passe-t-il lorsque vous stockez un type de valeur telle que des entiers?

string str = "Hello";
int i = 50;

ArrayList arraylist = new ArrayList();

arraylist.Add(str); // Makes perfectly sense: 
                    // Reference to string-object (instance) "Hello" is added to 
                    // index number 0

arraylist.Add(i);   // What happens here? How can a reference point to a value 
                    // type? Is the value type automatically converted to an 
                    // object and thereafter added to the ArrayList?


4 commentaires

Dupliqué possible de Comment "boxe" fonctionne-t-il dans .NET?


Pas vraiment - vous saviez seulement que les deux sont liés si vous connaissiez déjà la réponse à cette question.


@Binary inquiétant - c'est le même sujet, mais vous devez alors savoir comment cela s'appelle ..


@mavnn qui ne signifie pas qu'ils ne sont pas la même chose, cependant; P Un peu de duplication (surtout avec différents titres, etc.) est en bonne santé, cependant.


4 Réponses :


12
votes

Ça s'appelle "Boxe": automatiquement, l'INT est converti en un type de référence. Cela coûte certaines performances.

Voir aussi boxe et nonboxing .


0 commentaires

0
votes

Le arraylist.add () ajoutera à prendre n'importe quelle valeur et ajoute en tant qu'objet, la valeur entière sera donc automatiquement convertie (boxe) et est ajoutée à ArrayList.


0 commentaires

2
votes

Si vous tirez la classe ArrayList dans ILSPY, vous verrez que le magasin de support est le suivant: xxx

et que le ajoutez méthode accepte une instance de type objet : xxx

donc lorsque vous appelez Ajouter avec un entier, .NET cases L'entier et ensuite, il est ajouté au _Items < / code> tableau dans la liste comme un objet .

Incidemment, si vous avez besoin d'une arrayliste de Just entiers et Vous utilisez le cadre .NET 2.0 ou ultérieurement, vous devez utiliser le liste (liste générique de la liste générique), qui fonctionnera mieux car elle évite de boxer un int lors de la conservation ou de la récupérer de la liste (voir le Section des considérations de performance dans ce dernier lien).


0 commentaires

1
votes

sa boxe appelée. Une "boîte" contient une copie de la structure avec des détails sur le type c'est.

msdn: http: // msdn. microsoft.com/en-us/library/yz2be5wk%28v=vs.80%29.aspx

dans le cadre 2.0 + Microsoft nous a donné des génériques qui sont plus rapides et plus efficaces:

MSDN: http://msdn.microsoft.com/en-us/ Bibliothèque / MS172192.aspx


0 commentaires