我有一個類來處理傳入的空中消息並解析它們。根據命令的輸出,我需要處理一些UI修改,如高亮標籤,添加文本到文本框等,我用的是第一個選項是: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)。
對於最佳做法,我有什麼建議嗎?
的'之開關版本將始終execure默認分支......你說按預期工作? –
似乎「if else」塊在邏輯上與「switch case」塊不同。ParseMessageOptionX返回bool,someByte來自哪裏? –
交換機比if/else if/else更好。但是,如果有大量條件,則查找表(字典)會使您的代碼更加簡潔。 – RJM