清理一小块代码(开关、机箱、如果?
本文关键字:开关 机箱 如果 代码 | 更新日期: 2023-09-27 18:30:56
我听说有很多方法可以清理代码并使其执行得更快。你能帮我清除下面的代码吗?我的程序上有很多编码,看起来像下面的代码。我仍然是 C# 的初学者
case "jarvis":
if (ranNum == 1) { QEvent = ""; JARVIS.Speak("Yes sir"); }
else if (ranNum == 2) { QEvent = ""; JARVIS.Speak("Yes, whats up?"); }
else if (ranNum == 3) { QEvent = ""; JARVIS.Speak("Yes, I'm here"); }
else if (ranNum == 4) { QEvent = ""; JARVIS.Speak("I'm here"); }
else if (ranNum == 5) { QEvent = ""; JARVIS.Speak("go head sir, "); }
else if (ranNum > 5) { QEvent = ""; JARVIS.Speak("I'm listening"); }
break;
使用干净代码的主要好处不是让它执行得更快(尽管这通常是一个结果),而是在需求发生变化时更容易维护和修改。
也就是说,我建议将您可能传递给JARVIS.Speak
的所有字符串存储在如下数组中:
string[] javisSays = new[] {
"Yes sir",
"Yes, whats up?",
"Yes, I'm here",
"I'm here",
"go head sir, ",
"I'm listening"
};
然后,您可以像这样构建案例陈述:
case "jarvis":
if (ranNum > 0)
{
QEvent = "";
var quote = jarvisSays[Math.Min(ranNum, jarvisSays.Length) - 1];
JARVIS.Speak(quote);
}
break;
创建方法,通过给出随机数来返回朗读文本
case "jarvis":
if(ranNum >0)
{
QEvent = "";
JARVIS.Speak(GetQuote(ranNum));
}
break;
可以做一个开关语句。
switch (ranNum )
{
case 1:
QEvent = ""; JARVIS.Speak("Yes sir");
break;
case 2:
QEvent = ""; JARVIS.Speak("Yes sir");
break;
}
由于使用开关/外壳块和"jarvis"是一个案例表明可能有多个说话者,并且每个人都可能有不同的话要说,字典>非常适合这里,使说话者的集合和每个人可以说的短语更加动态。
然后它看起来像这样:
string speaker;
Dictionary<string, List<string>> Speakers = new Dictionary<string, List<string>>();
Speakers.Add("jarvis",new List<string>{"Yes sir",
"Yes, whats up?",
"Yes, I'm here",
"I'm here",
"go head sir, ",
"I'm listening" });
switch(speaker)
case "jarvis":
QEvent = ""; JARVIS.Speak(Speakers[speaker][rannum]);
break;
有了这个,设置一个.csv甚至.xml文件来保存数据并将其添加到字典中将是一件简单的事情。