2010-04-29 5 views
1

J'ai une situation pour laquelle je recherche une solution plus élégante.Une meilleure façon de représenter Mêmes valeurs (C# 3.0)

Tenir compte des cas ci-dessous

"BKP","bkp","book-to-price" (will represent) BOOK-TO-PRICE 

"aop","aspect oriented program" (will represent) ASPECT-ORIENTED-PROGRAM 

à savoir si l'utilisateur d'entrer BKP ou BKP ou d'un livre à prix, le programme devrait traiter que book-to-PRIX. La même chose vaut pour le second exemple (ASPECT-ORIENTED-PROGRAM).

J'ai la solution ci-dessous:

Solution:

if (str == "BKP" || str == "bkp" || str == "book-to-price") return "BOOK-TO-PRICE". 

Mais je pense qu'il peut y avoir beaucoup d'autres meilleures solutions.

Pourriez-vous les gens s'il vous plaît donner quelques suggestions. (Un exemple sera mieux)

J'utilise C# 3.0 et DotNet Framework 3.5

Répondre

3

J'envisager d'utiliser un Dictionary<string,string>, peut-être peuplé d'une configuration fichier ou table de base de données, avec un alias pour les relations de noms canoniques. Utilisez un comparateur de clé insensible à la casse. Par exemple,

var map = new Dictionary<string,string>(StringComparer.OrdinalIgnoreCase); 
map.Add("bkp", "BOOK-TO-PRICE"); 
map.Add("book-to-price", "BOOK-TO-PRICE"); 
map.Add("aop", "ASPECT-ORIENTED-PROGRAM"); 
map.Add("aspect oriented program", "ASPECT-ORIENTED-PROGRAM"); 

Ensuite il vous suffit, étant donné, la clé faire une O (1) recherche pour trouver le nom canonique.

var name = map["bkp"]; 
+1

C'est à peu près ce que je recommanderais. – Tejs

+0

Ouais, même ici; Puisque les chaînes sont immuables, il n'y a pas de surcharge de stockage (par rapport à d'autres méthodes, même lorsque les chaînes sont grandes) comme ce serait le cas en C. –

Questions connexes