gpt4 book ai didi

C# 处理多个 if/else if 语句的更好方法

转载 作者:行者123 更新时间:2023-11-30 21:50:41 24 4
gpt4 key购买 nike

我有一个类可以处理传入的无线消息并解析它们。根据命令的输出,我需要处理一些 UI 修改,例如突出显示标签、向文本框添加文本等。我​​使用的第一个选项是:

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 个)处理的更好方法。

根据需要,有什么关于我应该采用的最佳实践的建议吗?

最佳答案

因为你想要做的是“根据索引号调用具有相同签名的方法”,你可以使用 delegate 并将它们列在 Dictionary (或在 List 中,如果索引从 0 开始)以明确您的意图。

public delegate bool ParseMessage(Message msg, out byte resp);

然后使用 Dictionary 列出它:

Dictionary<byte, ParseMessage> parser = new Dictionary<byte, ParseMessage>(){
{1, new ParseMessage(ParseMessageOptionOne)},
{2, new ParseMessage(ParseMessageOptionTwo)},
{3, new ParseMessage(ParseMessageOptionThree)}
};

或使用List

List<ParseMessage> parser = new List<ParseMessage>(){
new ParseMessage(ParseMessageOptionOne),
new ParseMessage(ParseMessageOptionTwo),
new ParseMessage(ParseMessageOptionThree)
};

然后这样调用它:

bool result = parser[resp](msg, out resp); //dictionary
bool result = parser[resp-1](msg, out resp); //list

关于C# 处理多个 if/else if 语句的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36192643/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com