Qu'est-ce qu'une collection/un bon conteneur à utiliser pour stocker essentiellement le contenu d'une instruction de commutateur avec plusieurs situations de simulation? Je suppose, une façon plus précise est, ce qui est une bonne solution C# pour une recherche "many-keys-one-value"? J'ai vérifié à travers l'espace de noms System.Collections et ses espaces de noms associés, mais n'ai rien trouvé qui se soit particulièrement prêté à many-keys-one-value.Conversion d'une instruction de commutateur codée en dur en une recherche de plusieurs clés à charge unique chargée dynamiquement
Récemment, je me suis écrit un petit programme de console pour construire et valider les fichiers XML dont j'ai besoin pour mon application web, pour éviter les erreurs qui se produisent lors de l'écriture manuelle. Mais pour la version initiale, j'ai codé en dur un certain nombre d'éléments qui sont légèrement modifiables - en particulier quelques dictionnaires pour la validation et un grand commutateur-déclaration qui a un ensemble considérable d'options fallthrough. Bien que cela puisse fonctionner pendant plusieurs mois, il peut s'avérer nécessaire de mettre à jour ces éléments codés en dur, ce qui nécessiterait l'édition du fichier source. Afin d'éviter cela, j'ai décidé de stocker les informations du dictionnaire et de l'instruction switch dans un fichier XML (qui a finalement évolué, dans une tendance horriblement récursive, en écrivant un programme pour construire et valider ces fichiers XML pour moi). Maintenant, en stockant cela dans un fichier, quand je récupère les données, je ne peux pas simplement reconstruire l'instruction switch comme je peux les dictionnaires. J'ai donc simplement besoin de simuler l'effet d'une instruction switch, ce qui signifie que j'ai besoin de plusieurs "clés" pour faire référence à la même "valeur".
Exemple d'extrait de l'instruction switch. Cette méthode va convertir les entrées de valeurs spéciales en un ID correspondant, principalement pour économiser de l'espace mémoire humain en essayant de mémoriser les valeurs. Fondamentalement, comme illustré, j'aimerais un conteneur pour stocker les plusieurs clés qui sortent toutes une seule valeur.
private static string DiscernRegistrationId(string str)
{
string retVal = str;
switch (str.ToLowerKey()) //shortcut extension for str.Replace(" ","").Replace(".","").ToLowerInvariant()
{
case "computerpackage":
case "comppackage":
case "cpackage":
case "computerpkg":
case "comppkg":
case "cpkg":
retVal = "0x0100C73692D109C741A1B8846141B47519C8";
break;
case "mobilepackage":
case "mobpackage":
case "mpackage":
case "mobilepkg":
case "mobpkg":
case "mpkg":
retVal = "0x010081F753F0A4A5412CB6A8E9F8CD193F58";
break;
//More cases follow
}
return retVal;
}
Si vous cherchez à valider la * structure * (et dans une certaine mesure le * contenu *) d'un fichier XML, alors vous pouvez utiliser un xsd - cela peut vous éviter d'écrire une partie de votre énorme instruction switch. – slugster
@slugster C'est principalement la validation des valeurs possibles pour certains éléments. J'ai inclus un petit extrait de la déclaration switch pour illustrer ce que je cherche essentiellement. Il n'a pas été nécessaire de valider la structure du fichier jusqu'à présent, bien que la construction par programme du fichier aide certainement à empêcher que cela se produise à l'avenir. –