0

我听说有很多方法可以清理代码并使其执行得更快。你能帮我清除下面的代码吗?我的程序上有很多代码,看起来像下面的代码。我还是 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;
4

4 回答 4

9

使用干净代码的主要好处不是让它执行得更快——尽管这通常是结果——而是在需求发生变化时更容易维护和修改。

也就是说,我建议将您可能传递给的所有字符串存储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;
于 2013-09-12T02:51:51.763 回答
2

然后通过给出随机数创建方法以返回语音文本

case "jarvis":
    if(ranNum >0)
    {
        QEvent = "";
        JARVIS.Speak(GetQuote(ranNum));
    }
    break;
于 2013-09-12T02:56:42.543 回答
0

可以做一个switch语句。

switch (ranNum )
        {
            case 1:
             QEvent = ""; JARVIS.Speak("Yes sir");
            break;
            case 2:
             QEvent = ""; JARVIS.Speak("Yes sir");
            break;
        }
于 2013-09-12T02:52:16.570 回答
0

由于使用 switch/case 块和 'jarvis' 作为一种情况表明可能有不止一个发言者并且每个发言者可能有不同的说法,因此 Dictionary> 将非常适合这里,使集合说话者和短语每个人都可以说得更有活力。

然后它看起来像这样:

        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 文件来保存数据并将其添加到字典中将是一件简单的事情。

于 2013-09-12T04:34:05.360 回答