Je ne sais pas si je vais avoir une "journée difficile" - mais je me demandais simplement quel est le meilleur itinéraire ici.
Le contexte:
J'ai une liste de champs et je veux stocker des noms d'alias avec eux (j'utilise .NET 2.0 BTW), par exemple.
C'est donc essentiellement une paire de chaînes:
Référence, réf.
COMMUNAUTÉ, Communauté
POST_CODE, Code postal
... et je pense qu'il semble exagéré de continuer à créer des objets pour des choses comme celle-ci, je devrais donc créer un StringDictionary et stocker les valeurs de cette façon, même si je n'utiliserais aucune des fonctionnalités de la classe StringDictionary et je ne suis pas dérangé par une association clé-paire de valeurs, etc. - je veux simplement garder une paire de chaînes essentiellement.
Toute aide/pointeur serait génial.
Vous pouvez utiliser le Dictionary<string, string>
générique si vos "noms de champs" sont uniques.
Sinon, vous pouvez utiliser la classe Lookup si les clés en double ne vous dérangent pas.
Je ne voudrais pas trop m'inquiéter de savoir si vous utilisez ou non toutes les fonctionnalités de ces classes. Je pense que la préoccupation la plus importante devrait être d’écrire du code simple, facile à lire et à maintenir.
La classe générique "paire" pour .NET est Tuple
. Vous l'utiliseriez comme:
var strings=new List<Tuple<string, string>>();
strings.Add(Tuple.Create("REFERENCE", "Ref"));
Un dictionnaire est un substitut parfaitement acceptable si la chaîne la plus à gauche est unique (c'est-à-dire une clé). Sinon, vous aurez des erreurs.
Quant à savoir s’il est préférable d’utiliser les collections intégrées ou de créer un objet réel, cela dépend de vos besoins (ajouterez-vous plus de colonnes plus tard? Vous ne pouvez pas le faire avec une approche par dictionnaire), à quelle fréquence vous l’utilisez ( s'il s'agit d'un type de base, vous devriez probablement en faire un modèle de domaine), etc.
Edit: Pour ce qui est de ne pas utiliser les fonctionnalités intégrées du dictionnaire, ce n'est pas vrai: vous utilisez son algorithme de recherche binaire et sa construction d'arborescence interne pour des recherches ultra-rapides. Une liste de Tuple
ou de votre propre type n'aura probablement pas cela et elle retournera à une recherche linéaire.
Que diriez-vous de System.Tuple ?
qu'en est-il de Tuple<string,string>
? Il est intégré à .net 4.0 et léger.
À mon avis, il est préférable d'utiliser une structure personnalisée pour stocker deux chaînes, car: System.Collections.Generic.Dictionary
et System.Collections.Specialized.NameValueCollection
nécessitent que la méthode Add
leur ajoute des chaînes - il s'agit de lignes de code supplémentaires . La classe System.Tuple
n'a que des propriétés ReadOnly - ceci peut être un obstacle.
Exemple de structure simple:
public struct DoppelWert
{
public string Wert1;
public string Wert2;
}
Pour les paires de chaînes, utilisez alternativement NameValueCollection
Surpris, personne n'a mentionné KeyValuePair? https://msdn.Microsoft.com/en-us/library/5tbh8a42(v=vs.110).aspx
Veuillez noter que si vous êtes préoccupé par les performances, jetez un œil à cette comparaison http://www.dotnetperls.com/keyvaluepair