清理一小块代码(开关、机箱、如果?

本文关键字:开关 机箱 如果 代码 | 更新日期: 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文件来保存数据并将其添加到字典中将是一件简单的事情。