У меня есть класс, который обрабатывает входящие сообщения в эфир и анализирует их. В зависимости от вывода команды, мне нужно обрабатывать некоторые модификации пользовательского интерфейса, такие как выделение ярлыков, добавление текста в текстовых и т.д. Первый вариант я использую это:C# Лучший способ обрабатывать несколько операторов if/else if
void IncomingMessageIfStatements(Message msg, Host host)
{
byte resp;
if (ParseMessageOptionOne(msg, out resp))
{
// Do some windows form stuff
}
else if (ParseMessageOptionTwo(msg, out resp))
{
// Do some windows form stuff
}
else if (ParseMessageOptionThree(msg, out resp))
{
// Do some windows form stuff
}
}
private bool ParseMessageOptionOne(Message msg, out byte resp)
{
throw new NotImplementedException();
}
private bool ParseMessageOptionTwo(Message msg, out byte resp)
{
throw new NotImplementedException();
}
private bool ParseMessageOptionThree(Message msg, out byte resp)
{
throw new NotImplementedException();
}
Это работает, но у меня будет более else if
и это может стать уродливым. Следующим способом, который я рассматривал, является следующее:
void IncomingMessageSwitchStatements(Message msg, Host host)
{
byte resp = 0;
byte someByte = 0;
bool output = false;
switch (someByte)
{
case 1:
output = ParseMessageOptionOne(msg, out resp);
break;
case 2:
output = ParseMessageOptionTwo(msg, out resp);
break;
case 3:
output = ParseMessageOptionThree(msg, out resp);
break;
default:
//handle exception here
break;
}
if (output && resp == 0x01)
{
UpdateUiFromHere();
}
}
private void UpdateUiFromHere()
{
// handle UI updates here
}
Это выглядит намного чище и работает по назначению. Но потом я начал смотреть на Dictionary<byte, Func<bool>>
и подумал, что это был лучший подход к решению обработки множества входящих событий (возможно, 20).
Любые предложения по наилучшей практике, на которые я должен пойти, учитывая, что нужно?
Параметр 'switch' версия будет всегда execure по умолчанию филиал ... Вы говорите, что он работает как задумано? –
Кажется, что блок «if else» логически не совпадает с «случаем коммутатора».ParseMessageOptionX возвращает bool, откуда приходит someByte? –
переключатель лучше, чем if/else if/else. Однако, если существует большое количество условий, тогда таблица поиска (словарь) сделает ваш код более кратким. – RJM