web-dev-qa-db-fra.com

Quel est le meilleur moyen de stocker des paires de chaînes, de créer un objet ou d'utiliser une classe dans .NET?

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.

enter image description here

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.

21
Vidar

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.

8
Neil Fenwick

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.

38
Blindy

Que diriez-vous de System.Tuple ?

14
Andy Johnson

qu'en est-il de Tuple<string,string>? Il est intégré à .net 4.0 et léger.

5
Carsten

À 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;
}
4
Zagavarr

Pour les paires de chaînes, utilisez alternativement NameValueCollection

2
Alex M

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

0
Jayee