Déclarer et utiliser un tableau d'objets anonymes en C#
Combien de fois nous déclarons une classe simple ou structure pour tenir quelques propriétés pour ne les utiliser qu'une seule fois lorsque retournée par une méthode. Trop de fois je pense que, heureusement, nous avons toujours anonyme des objets qui peuvent être déclarés en place au moment de l'exécution.
Avec cette pensée à l'esprit, je voudrais savoir comment je peux déclarer un tableau de ces objets anonymes.
Exemple:
var Employee = new { ID = 5, Name= "Prashant" };
Cela a créé un objet anonyme avec deux propriétés, un entier et une autre chaîne de caractères.
Tous bien ici, mais comment dois-je déclarer un tableau de ce genre d'objet, et comment voulez-vous recommander une itération à travers elle à la fois avec un for
et foreach
boucles.
La foreach
boucle est vraiment le problème, je pense, parce que les boucles foreach s'attendre à un type déclaré. Encore il pourrait y avoir une suite, si il y est je voudrais savoir aussi, bien sûr.
Ils sont - les classes appropriées sont créés en dessous. (Il n'y a tout simplement pas de voie d'accès au nominatif nom dans un bien tapé. Maintenant,
dynamic
coercition sur un tableau de ces types ..)OriginalL'auteur Fábio Antunes | 2013-01-02
Vous devez vous connecter pour publier un commentaire.
[edit - mis à jour afin de montrer à la population, la base de l'énumération, etc]
@Eve dit, LINQ est votre ami ici; en règle générale, ne pas essayer de passer les types anonymes autour - vous pouvez, si vous êtes malin - mais c'est une ÉNORME douleur dans le cul de traiter avec eux à l'extérieur du contexte et de la portée qu'elles ont été déclarées.
De pentecôte, j'ai décidé de voir de quelle manière on pourrait "déclarer un tableau d'un type anonyme" comme une amusante expérience de pensée, et est venu avec ces:
(note: le "Dump" est due à ce que cela soit écrit dans LINQPad)
Oh, parce que je n'ai pas remplir le tableau dans cet exemple; cela crée un tableau vide pour stocker les éléments de ce type anonyme. Tout à fait inutile. 🙂
Oui j'ai remarqué. Pourtant, c'est une bonne série d'exemples.
Vos exemples sur la façon de déclarer les tableaux sont assez bon, bien sûr que vous ne voulez pas inclure une itération à travers elles, comme dans d'autres réponses? C'est la seule chose que j'ai besoin de la marque de vous répondre en tant que correcte, ne serait pas un bon karma pour le faire à ce moment, parce que d'autres ont inclus tous j'ai demandé dans la question. Vous n'êtes manquant.
Hah - sûrement, à un moment.
OriginalL'auteur JerKimball
Votre première et deuxième phrases indiquent que vous avez des buts contradictoires à l'esprit. Les types anonymes, et donc des tableaux de types anonymes, ne peuvent pas facilement être retourné à partir d'une méthode, car il est impossible de déclarer le type de retour. Essayez d'utiliser uniquement les types anonymes pour temporaire de variables locales.
Comme ceci:
ou
C'est une excellente question. Si seulement il y avait un site pour poser des questions comme ça...
Juste assez. J'ai pensé faufiler un par. Été un peu échaudé depuis Skeet brochettes de ma dernière question sur la clarté. 😉
La réponse courte est: qu'est-ce que l'irrésistible avantage de rendre le résultat d'un requête mutable? Légèrement plus longue réponse a à voir avec la table de clés. Voir blogs.msdn.com/b/ericlippert/archive/2007/04/13/... et blogs.msdn.com/b/sreekarc/archive/2007/04/03/...
Qui a le sens parfait de l'intention originale de la demande sur les types, bien que, comme cela est souvent le cas, l'utilisation est rapidement de l'expansion au-delà de l'intention initiale. En tout cas, c'est simplement de la curiosité malsaine; plus je sling code, plus je me dirige vers l'immuabilité de toute façon. Merci!
OriginalL'auteur Eric Lippert
Vous pouvez utiliser
var
dans leforeach
:Démo
Il existe déjà beaucoup de questions au sujet de ce sur Stackoverflow. Ici une autre recherche rapide hit qui décrit ce que vous pourriez faire pour retourner un type anonyme à partir d'une méthode. Mais vous devriez lire la partie sur la soigneusement les risques.
Oui, la déclaration d'une Liste<T> T de l'objet et peut-être dynamique. J'étais conscient de tout l'un d'eux, mais j'ai pensé que peut-être il y a une meilleure façon. De toute façon, je vous remercie.
OriginalL'auteur Rango
Vous pouvez utiliser LINQ pour obtenir ce dont vous avez besoin. Voici un exemple.
Alternativement, si vous voulez juste le tableau mais vous n'avez pas les données, vous pouvez utiliser cette solution de contournement. Toutefois, le résultat sera un
Array
, n'ayant aucune information sur le type des éléments.Sur l'itération, vous pouvez utiliser
var
dans votrefor
/foreach
boucle pour éviter le problème de déclarer le type.EDIT: une autre solution pour créer un tableau vide avec un nombre arbitraire d'éléments, basée sur un échantillon de.
J'ai édité mon post avec un peu de solution de contournement. Il peut y avoir plusieurs façons de le faire, mais c'est le premier qui est venu à mon esprit.
Je viens de remarquer votre modifier Veille donc je vais supprimer mon commentaire..
En utilisant le code dans la solution de contournement dans un
foreach
entraîneraitem
être de typeobject
, pas souhaité type anonyme.Vrai, comme je l'ai mentionné dans le post. En train d'essayer de trouver une solution simple pour obtenir un typée tableau vide.
OriginalL'auteur Mir