Estoy tratando de encontrar una solución para este problema. Este es mi código de ejemplo:usando la colección de cadenas en una instrucción switch
class Program
{
private string Command;
private static string[] Commands = { "ComandOne", "CommandTwo", "CommandThree", "CommandFour" };
static void Main(string[] args)
{
Command = args[0];
switch(Command)
{
case Commands[0]: //do something
break;
case Commands[1]: //do something else
break;
case Commands[2]: //do something totally different
break;
case Commands[3]: //do something boring
break;
default: //do your default stuff
break;
}
}
void DifferentMethod()
{
foreach(string c in Commands)
{
//do something funny
}
}
}
Este código no funciona porque los valores de cadena en el interruptor no son constantes. Quiero escribir un código fácil de mantener.
Me gusta usar algo así como una matriz porque necesito usar los mismos valores en otro lugar en un bucle.
Con int-values, una enumeración sería perfecta, pero no encontré una solución pequeña para lo mismo con cadenas.
mayoría de las soluciones sugieren enumeraciones, pero los nombres de enumeración tienen requisitos especiales de nomenclatura. Si esto causa problemas, puede vincular un 'DescriptionAttribute' a cada elemento de enumeración para que contenga un nombre descriptivo (que podría tener espacios o lo que sea), y podría buscar esos nombres al iterar sobre la enumeración dentro de' DifferentMethod'. – Brian
@Brian, buen punto, y para obtener ese atributo, necesitará el campo: 'FieldInfo enumField = typeof (Comandos) .GetField (enumValue.ToString());' –
@Kirk Woll: Las siguientes dos líneas después de ese ser : 'DescriptionAttribute da = (DescriptionAttribute) Attribute.GetCustomAttribute (enumField, typeof (DescriptionAttribute)); if (da.Description! = null) description = da.Description; ' – Brian