6
votes

Puis-je utiliser la notation DOT pour accéder à des valeurs de dictionnaire?

J'utilise Dictionnaire comme configuration des instruments, et il serait plus facile pour mes utilisateurs qui ne connaissent pas beaucoup de programmes de programmation pour pouvoir obtenir une autocomplete de Visual Studio.

dans Python, je peux faire un dictionnaire et accéder aux différentes valeurs avec un opérateur de points. xxx

est un moyen de faire cela?

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).

c#

0 commentaires

4 Réponses :


0
votes

semble que vous voulez une structure. http://msdn.microsoft.com/en-us/library/0AEF578. ASPX

Edit: modifié à un lien plus récent.


1 commentaires

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.



7
votes

Vous pouvez déjà le faire en C # avec des types anonymes: xxx

ou types réels: xxx

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 : xxx

Cependant, je ne suis pas sûr que vous puissiez faire l'intellientense à l'aide de l'analyse statique en C #.

Le plus proche C # équivalent à ce que vous avez est xxx

qui va pas support intellisense.

Si vous faites une API, j'utiliserais de vrais types.


3 commentaires

dynamique ne vous permettra pas d'ajouter des propriétés au moment de l'exécution par lui-même. expandoObject 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.



0
votes

Vous recherchez une méthode imo enchaînant.

Méthode enchaînant - Pourquoi est-ce une bonne pratique, ou pas?

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. xxx

pris de

MS-Aide: //ms.vsc.v90/ms.msdnqtr.v90.fr/fxref_mscorlib/html/589059D3-D7F8-E09B-705D-91A461971CC2.HTM

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.

L'approche LINQ fonctionnerait également - pas besoin d'utiliser des types anonymes Bien que xxx

Cependant, cela ne vous oblige pas à définir toutes les propriétés d'une personne morose et utilisera son constructeur vide.

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.


2 commentaires

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.



0
votes

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 ()


0 commentaires