J'utilise dans Python, je peux faire un dictionnaire et accéder aux différentes valeurs avec un opérateur de points. P> est un moyen de faire cela? P > Je réalise que tous les problèmes concernés depuis le dictionnaire est une seule collection générique (comment générique? Est-ce juste une liste de KeyValuePairs? Question intéressante). Je ne suis pas sur le point d'écrire une classe d'emballage pour cela pour y accomplir (j'aimerais que cela soit un peu plus flexible que d'utiliser des propriétés explicites avec une classe personnalisée). P> P> Dictionnaire
4 Réponses :
semble que vous voulez une structure. http://msdn.microsoft.com/en-us/library/0AEF578. ASPX P>
Edit: modifié à un lien plus récent. p>
J'aime plutôt l'idée d'utiliser une structure, à condition que vous sachiez quels champs / propriétés devraient être à l'avance. Qui vous voulez probablement si vous le documez.
Vous pouvez déjà le faire en C # avec des types anonymes: ou types réels: p> et, dans c # 4.0 nous aura le DLR qui permettra d'ajouter des propriétés au moment de l'exécution à l'aide du expandoObject : p> Cependant, je ne suis pas sûr que vous puissiez faire l'intellientense à l'aide de l'analyse statique en C #. p> Le plus proche C # équivalent à ce que vous avez est p> qui va pas em> support intellisense. p> Si vous faites une API, j'utiliserais de vrais types. p> p>
dynamique code> ne vous permettra pas d'ajouter des propriétés au moment de l'exécution par lui-même. expandoObject code> fait toute la magie et vous devez initialiser cela au lieu d'un type anonyme.
impressionnant. Je ne savais pas à ce sujet. toute la situation de l'API est un peu idiote, mais c'est le moyen le plus simple que je puisse garder les gens hors de problèmes, ce qui est vraiment ce qui compte à la fin de la journée
N'oubliez pas que si vous comptez sur les utilisateurs pour créer des types anonymes, vous devrez utiliser la réflexion ou le mot-clé «dynamique» pour accéder aux valeurs.
Vous recherchez une méthode imo enchaînant.
Méthode enchaînant - Pourquoi est-ce une bonne pratique, ou pas? P>
Objet de dictionnaire est une collection (liste) des paires de valeurs de clé qui implémentent également une table de hachage d'accès. Il est presque n (1) en termes de vitesse d'accès. P> pris de p> MS-Aide: //ms.vsc.v90/ms.msdnqtr.v90.fr/fxref_mscorlib/html/589059D3-D7F8-E09B-705D-91A461971CC2.HTM P>
blockQuote> En fait, l'algorithme de récupération change alors qu'il devient plus grand, car une table de hachage est moins efficace pour un petit nombre d'articles. P> L'approche LINQ fonctionnerait également - pas besoin d'utiliser des types anonymes Bien que p> Cependant, cela ne vous oblige pas à définir toutes les propriétés d'une personne morose et utilisera son constructeur vide. P> Vous ne pouvez pas utiliser intellisense si Vous voulez accéder aux propriétés par des chaînes. Vous auriez besoin d'utiliser la réflexion pour la mettre en œuvre. P> p>
En regardant le code source du dictionnaire référencesSource.microsoft.com/ # MSCORLIB / SYSTÈME / COLLECTIONS / ... Je ne peux pas voir que l'ALG change avec la taille
Eh bien regarder ailleurs que la réponse a 10 ans.
Ne vous laissez pas cuire dans une solution élaborée avec expandoObject () si vous envisagez d'instancier vos objets à l'exécution (comme à partir d'un appel de base de données), il n'y a pas d'intellisense pour "notation de points" et il produira une erreur de compilation Si vous essayez de l'utiliser. Vous pouvez utiliser la notation de support ["PROPNAME"] pour y accéder cependant à ce stade, vous pouvez également créer des objets de classe personnalisés ou simplement manipuler les valeurs selon les besoins dans un fichier de données () p>