2010-02-04 2 views
4

Comment puis-je insérer un nouvel objet dans un tableau anonyme?Comment puis-je insérer un nouvel objet dans un tableau anonyme?

var v = new[] 
      { 
       new {Name = "a", Surname = "b", Age = 1}, 
       new {Name = "b", Surname = "c", Age = 2} 
      }; 

Je sais tout d'abord que nous définissons la limite (taille) du tableau.

Je le convertis en liste. Pour insérer un nouvel objet

v.ToList().Add(new { Name = "c", Surname = "d", Age = 3 }); 

Mais j'ai toujours 2 éléments dans la variable v. Où est passé le troisième élément?

Mais je ne peux pas affecter à une autre variable de liste.

List newV = v.ToList(); 

Répondre

5

.ToList() produit un nouvel objet de liste, en ajoutant tous les éléments de la source d'entrée, votre tableau, en elle. En tant que tel, le tableau d'origine n'est pas modifié du tout.

Vous ne pouvez pas ajouter d'éléments à un tableau existant, il a une taille fixe, la seule chose que vous pouvez faire est de remettre un nouveau tableau dans la variable.

Je ne l'ai pas essayé, mais essayez ceci:

var l = v.ToList(); 
l.Add(...); // your existing add code 
v = l.ToArray(); 

Mais, notez qu'à ce stade, vous devriez regarder pourquoi vous voulez utiliser des types anonymes en premier lieu, je pense sérieusement à il suffit de créer un type nommé et d'utiliser une liste pour commencer.

Notez que vous ne pouvez pas écrire List l = v.ToList(); comme le type de la liste est générique (il retourne quelques List<some-anonymous-type-here>, pas seulement List. Avec des types anonymes, vous devez utiliser var.

1

Il n'est pas une « liste » mais une liste générique dactylographiée sur votre type anonyme.Pour cette raison, vous ne pourrez pas écrire le type explicitement pour cette opération.Vous devez utiliser "var newV = v.ToList()" ou le taper comme un IEnumerable, qui est une interface non générique implémentée par les listes génériques

Votre code ci-dessus pour l'ajout d'un nouvel élément peut ne pas faire ce que vous pensez. En ce moment, il n'ajoute pas un nouvel élément à v, mais en créant une nouvelle liste, en ajoutant un élément à cette liste, puis la liste est partie parce que vous n'avez aucune référence. Vous devez convertir v en une liste, puis ajouter l'élément.

-1

En fait, vous devriez être capable de. Pour votre tableau anonyme v ci-dessus, vous pouvez ajouter un nouvel élément comme suit:

v[2] = new {Name = "c", Surname = "d", Age = 3}; 

Après avoir ajouté le nouvel élément, vous pouvez le vérifier par exemple par la ligne de code suivante:

MessageBox.Show(v[2].ToString()); 
Questions connexes