2013-09-12 3 views
0

Я слышал, что есть много способов очистить код и сделать его более быстрым. Можете ли вы помочь мне очистить код ниже. У меня много кодов в моей программе, которая выглядит как код ниже. Я еще новичок в C#Очистка небольшого блока кода (Switch, Case, If?)

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; 
+7

Этот вопрос лучше подходит для codereview.stackexchange, на мой взгляд, –

ответ

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; 
+0

только для вопросительного вопроса, этот метод означает, что вы можете просто добавить больше ответов, и он будет автоматически получать больше ответов, однако везде, где вы производите свое случайное число, вы должны ограничить это по длине jarvisSays –

+0

Не было бы списка или словаря лучше? И тогда 'if myList.Contains (ranNum) {myList [ranNum]};' –

+4

@AthomSfere Вы могли бы это сделать, но если ваши динамически добавляемые строки или значения ключа ('ranNum') не содержат пробелов, я действительно не см. преимущество этого над простым массивом. –

0

Может сделать оператор switch.

switch (ranNum) 
     { 
      case 1: 
      QEvent = ""; JARVIS.Speak("Yes sir"); 
      break; 
      case 2: 
      QEvent = ""; JARVIS.Speak("Yes sir"); 
      break; 
     } 
+0

Я думаю, что все равно то же самое;) – Pyromancer

2

создать метод, чтобы вернуть текст говорить, давая случайное число, то

case "jarvis": 
    if(ranNum >0) 
    { 
     QEvent = ""; 
     JARVIS.Speak(GetQuote(ranNum)); 
    } 
    break; 
0

С использованием переключателя/корпуса блока и «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-файл для хранения данных, а также добавить его в словарь.