Я пытаюсь найти решение этой проблемы. Это мой пример кода:с использованием набора строк в операторе 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
}
}
}
Этот код не работает, потому что строковые значения в коммутаторе не являются константами. Я хочу написать легко поддерживаемый код.
Мне нравится использовать что-то вроде массива, потому что мне нужно использовать те же значения где-то еще в цикле.
С int-значениями перечисление было бы идеальным, но я не нашел маленького решения для одной и той же строки со строками.
Большинство решений Предлагайте перечисления, но имена перечислений имеют специальные требования к именованию. Если это вызывает проблемы, вы можете привязать «DescriptionAttribute» к каждому элементу перечисления, чтобы содержать дружественные имена (которые могут иметь пробелы или что-то еще), и могли бы искать эти имена при повторении перечисления в 'DifferentMethod'. – Brian
@Brian, хорошая точка, и для получения этого атрибута вам понадобится поле: 'FieldInfo enumField = typeof (Команды) .GetField (enumValue.ToString());' –
@Kirk Woll: следующие две строки после этого : 'DescriptionAttribute da = (DescriptionAttribute) Attribute.GetCustomAttribute (enumField, typeof (DescriptionAttribute)); if (da.Description! = null) description = da.Description; ' – Brian