Я сейчас программирую речевой инструмент в проекте в моем университете. Я получил совет сократить количество выражений if / else if, но я не могу думать о другом способе решения этого вопроса, кроме, возможно, switch / case.
Каждый голосовой вывод отличается, и сопрограммам нужны разные параметры в зависимости от типа поезда. Так что я не знаю, как это упростить. Существуют ли специальные методы / лучшие практики в C # для решения подобных проблем?
Приложение разработано в Unity с Microsoft Speech API
Значит, утверждения похожи на
if (spokenText.IndexOf("Ticket") > 0)
// Voice Output
else if (spokenText.IndexOf("Wo") > 0)
{
if (spokenText.IndexOf("Bahn") > 0 || spokenText.IndexOf("Zug") > 0)
{
//Ask for Train
}
else if (spokenText.IndexOf("nächste") > 0 && (spokenText.IndexOf("RE") > 0 || spokenText.IndexOf("S-Bahn") > 0 || spokenText.IndexOf("ICE") > 0) || spokenText.IndexOf(" S ") > 0
|| spokenText.IndexOf("IC") > 0 || spokenText.IndexOf("EC") > 0)
{
if (spokenText.IndexOf("ICE") > 0)
{
//Start Coroutine
}
else if (spokenText.IndexOf("EC") > 0)
{
// Start Coroutine with different Parameter
}
else if (spokenText.IndexOf("IC") > 0)
{
//Start Coroutine with different Parameter
}
}
else
// Voice output
}
else if (spokenText.IndexOf("Wann") > 0)
{
if ((spokenText.IndexOf("Zug") > 0 || spokenText.IndexOf("Bahn") > 0) && spokenText.IndexOf("nächste") > 0 && spokenText.IndexOf("nach") > 0)
{
// Coroutine
}
else if (spokenText.IndexOf("Zug") > 0 || spokenText.IndexOf("Bahn") > 0)
{
// Voice output
}
else if (spokenText.IndexOf("nächste") > 0 && (spokenText.IndexOf("RE") > 0 || spokenText.IndexOf("S-Bahn") > 0 || spokenText.IndexOf("ICE") > 0) || spokenText.IndexOf(" S ") > 0
|| spokenText.IndexOf("IC") > 0 || spokenText.IndexOf("EC") > 0)
{
if (spokenText.IndexOf("ICE") > 0)
{
// Coroutine
}
else if (spokenText.IndexOf("EC") > 0)
{
//Coroutine
}
else if (spokenText.IndexOf("IC") > 0)
{
//Coroutine
}
}
else
//Voice Output
}
else if (spokenText.IndexOf("Barrierefrei") > 0 || spokenText.IndexOf("Aufzug") > 0 || spokenText.IndexOf("Rolltreppe") > 0)
{
//Coroutine
}
else {
//Voice Output
}
}
edit: сначала добавляется оператор if