2016-08-10 1 views
2

Je souhaite savoir si mon approche est bonne ou mauvaise?Boxe et UnBoxing de la liste à l'objet en C#

les deux déclarations Référez

Case: # 1

List<string> person = new List<string>() { 
          "Harry" 
          "Emma" 
          "Watson" 
         } 

Case: # 2

Object person = new List<string>() { 
          "Harry" 
          "Emma" 
          "Watson" 
         } 

Faites-moi savoir

qui déclaration est boxe et quelle déclaration est un-boxing?

Les deux déclarations sont égaux et identiques ???

+0

Il n'y a pas de boxe dans les deux cas ici. Votre code n'inclut aucun type de valeur du tout. Les instructions ne sont cependant pas identiques - l'une déclare une variable de type 'List ' et l'autre déclare une variable de type' Object' ... qui affecte la façon dont vous pouvez utiliser la variable plus tard. –

+0

'Liste ' est un 'class', pas' struct', donc il n'y a pas de boxe –

Répondre

2

Aucune d'entre elles. Boxing et unboxing est un mécanisme prévu pour gérer les types de valeur avec un système de type unifié dans .NET.

par exemple:

int i = 4; 
object o = i; //boxing, int is boxed in an object 
int j = (int)o; //unboxing, an int is unboxed from an object 

De MSDN:
enter image description here

En savoir plus sur why we need boxing and unboxing.

Il existe un cas particulier dans la boxe des types Nullable. Lorsqu'une boîte de type NULL, elle contient comme valeur ou null. Vous ne pouvez pas avoir une valeur NULL encadrée.

int? a = 4; 
object o = a; //boxing, o is a boxed int now 
Console.WriteLine(o.GetType()); //System.Int32 
int? b = null; 
o = b; //boxing, o is null 
Console.WriteLine(o.GetType()); // NullReferenceException 
2

Il n'y a pas de boxe parce que la liste est un type de référence:

boxe est le processus de conversion d'un type de valeur à l'objet de type ou à tout type d'interface mis en œuvre par ce type de valeur

Unboxing extrait le type de valeur de l'objet

. La boxe est implicite; le déballage est explicite. Le concept de boxe et unboxing sous-tend la vue unifiée C# du système de type dans lequel une valeur de n'importe quel type peut être traité comme un objet.

Lire la suite: MSDN

Ceci est la boxe:

int i = 123; 
// The following line boxes i. 
object o = i; 

Ceci est unboxing:

o = 123; 
i = (int)o; // unboxing 
1

Il n'est pas une boxe ou unboxing.

La boxe signifie que vous stockez le value type dans the reference type et le déballage est l'inverse de boxing.

Dans vos exemples à la fois la liste et l'objet sont reference type .vous ne jouent avec des références

int i = 123; 
// The following line boxes i. 
object o = i; 

o = 123; 
i = (int)o; // unboxing 

int -> object boxing 

object -> int unboxing 

Pour plus voir ici Boxing and Unboxing