Возможно ли как-то упростить реализацию блока if?
Хочу написать метод для распознавания типа команды, получаемую от клиента. Типы команд хранятся в enum ServerComands.Comands. Проблема в том, что если использовать реализацию через условный оператор, то выглядеть это будет ужасно, да и каждое пополнение командами в будущем будут вызывать только головную боль из-за редактирования, да и принцип "не повторяйся" тоже нарушает. Знаете ли Вы какие-нибудь трюки или способы упростить такой способ реализации.
Код:
private ServerComands.Comands RecognizeComand(string request)
{
if (request.Contains(GetEnumStringValue(ServerComands.Comands.BACK)))
{
return ServerComands.Comands.BACK;
}
if (request.Contains(GetEnumStringValue(ServerComands.Comands.DISPOSE)))
{
return ServerComands.Comands.DISPOSE;
}
if (request.Contains(GetEnumStringValue(ServerComands.Comands.FORWARD)))
{
return ServerComands.Comands.FORWARD;
}
if (request.Contains(GetEnumStringValue(ServerComands.Comands.FULLSCREEN)))
{
return ServerComands.Comands.FULLSCREEN;
}
if (request.Contains(GetEnumStringValue(ServerComands.Comands.PAUSE)))
{
return ServerComands.Comands.PAUSE;
}
if (request.Contains(GetEnumStringValue(ServerComands.Comands.SHUTDOWN)))
{
return ServerComands.Comands.SHUTDOWN;
}
if (request.Contains(GetEnumStringValue(ServerComands.Comands.YOUTUBE)))
{
return ServerComands.Comands.YOUTUBE;
}
return ServerComands.Comands.None;
}
private string GetEnumStringValue(ServerComands.Comands comand)
{
return comand.ToString();
}
Ответы (1 шт):
Автор решения: aepot
→ Ссылка
private ServerComands.Comands RecognizeComand(string request)
{
if (request?.Length > 0 && Enum.TryParse(request.Split()[0], true, out ServerComands.Comands command) && Enum.IsDefined(command))
return command;
else
return ServerComands.Comands.None;
}
Команда будет распознана без учета регистра.