2012-05-02 2 views
4

Existe-t-il un moyen d'ajouter des commentaires pour documenter un Dictionnaire ou un ConcurrentDictionary pour savoir ce que signifient les clés/valeurs?Dictionnaire - Ajouter des commentaires pour piloter intellisense

Par exemple:

Dictionary<guid, string> _users; 

Cet exemple a un dictionnaire d'utilisateurs. Le guid est l'UserId et la chaîne est le nom d'utilisateur, mais il est difficile de dire autre chose que de simplement "savoir".

Y at-il un moyen d'ajouter des documents de sorte que lorsque vous ajoutez des éléments, intellisense indique au développeur une note sur la valeur & clé?

Je sais que je peux ajouter un commentaire <summary> ci-dessus et il met cette note dans l'objet lui-même, mais était à la recherche lors de l'ajout, la suppression, etc.

+0

ressemble vraiment surpuissant pour moi ... –

Répondre

3

récemment dans le livre GOOS j'ai trouvé idée intéressante de types d'emballages communs (tels que les collections) dans ses propres cours:

Essayez d'utiliser la langue du problème que vous travaillez, plutôt que la langue. Constructions nettes. Il réduit l'écart conceptuel entre domaine et code. Essayez également de limiter en passant des types avec des génériques. C'est une forme de duplication . C'est un indice qu'il existe un concept de domaine qui devrait être extrait au type.

Franchement je ne suis pas extrémale dans l'emballage des collections génériques communes, mais même donner un type propre nom le fait correspondre plus facile à lire et à comprendre:

public class UserNameDictionary : Dictionary<int, string> 
{ 
} 

Très simple.Et maintenant, ce qui est mieux lire:

Dictionary<int, string> users = new Dictionary<int, string>(); 
UserNameDictionary users = new UserNameDictionary(); 

ajoutez vous pouvez également rapidement commentaire à votre classe:

/// <summary> 
/// Represents a dictionary of user names accessed by ids. 
/// </summary> 

Ce ne sera pas ajouter des commentaires à des méthodes telles que Ajouter (int, string), mais quand d'autres les gens vont utiliser cette classe, ils penseront dans le contexte de UserNameDictionary, pas dans le contexte Dictionary<int, string> abstrait.

Si vous voulez rendre votre classe plus pratique, vous pouvez cacher les méthodes de classe de base:

public new void Add(int userId, string userName) 
{ 
    base.Add(userId, userName); 
} 

Pour les cas d'utilisation plus complexes, je partirais avec classe personnalisée qui délèguent du travail au dictionnaire interne.

1

Vous pouvez sous-classe le dictionnaire, remplacer les différents add/remove méthodes pour mettre vos propres commentaires. Une autre option consiste à créer votre propre classe de collection qui enveloppe un dictionnaire interne et implémente IDictionary (si nécessaire). Au-delà de cela, je ne suis pas sûr de ce que les fonctionnalités de studio visuel sont disponibles pour faire ce que vous voulez, mais je ne suis pas un expert à cet égard.

2

Pour votre cas spécifique, la réponse courte est «Pas sans un tas de code standard».

Les méthodes peuvent être décorées pour documenter ce que signifie un paramètre de type. Ce qui suit montrera ce que les paramètres signifient dans Intellisense comme prévu.

/// <summary> 
/// Class to contain things 
/// </summary> 
/// <typeparam name="T">UserID</typeparam> 
/// <typeparam name="TK">UserName</typeparam> 
public class MyDictionary<T,TK> : Dictionary<T,TK> 

Vous pouvez utiliser ceci pour remplacer les méthodes virtuelles et les documenter de la même manière. Cependant, le dictionnaire <,> n'a pratiquement pas de virtual, donc vous devrez créer vos propres appels, puis appeler 'base'. (en ignorant le "nouveau" problématique).

Mais à ce moment-là, vous devriez juste aller de l'avant avec:

public class MyDictionary : Dictionary<string,string> 

et faire avec elle.

0

Une solution qui a besoin de moins de ressources que la solution de Sergey mais réalise même serait

using UserNameDictionary = Dictionary<int, string>; 
Questions connexes