У меня есть программа, которая полностью функциональна, и теперь я реорганизую ее. Я просто изучаю C#, поэтому исходный код был довольно ужасным, несмотря на то, что он прошел отлично. Одним из требований программы является то, что пользователь сможет вернуться в главное меню в любой момент. Я совершил это следующим образом:Решение для злоупотребления фразами?
static bool bouncer = false
static void Exit(string input)
{
if (input == "\t")
{
bouncer = true
}
}
static string Prompt(string msg)
{
// takes input and passes it to Exit() then returns the input
}
static string FunctionA()
{
while(true)
{
if (bouncer == true)
{
break;
}
Prompt("whatever")
if (bouncer == true)
{
break;
}
Prompt("whatever")
if (bouncer == true)
{
break;
}
// return some stuff
}
}
static void Main()
{
bouncer = false
// writes the menu to console and handles UI
// FunctionA
{
Переменный Вышибала получает значение истины, если пользователь вводит «вкладку» символ в любой точке входа. Распространение условных выражений break предоставляет структуру, которая фактически вырывается обратно в Main(). Это, очевидно, не очень хорошее решение, и это делает код трудным для чтения.
Других попыток, которые я считал для выполнения тех же задач являются:
Goto утверждение, что прыгает прямо обратно в Main(). Я отказался от этого, потому что goto имеет очень ограниченную область действия в C#, и я не думаю, что есть хороший способ сделать его работоспособным в этой ситуации.
Вызов Main() непосредственно из Exit(). Вероятно, это плохая идея, и я никак не могу это сделать, потому что, по-видимому, Main() «защищен» каким-то образом.
Использование события для реагирования на нажатие TAB или ESC. Мне непонятно, как я могу использовать событие, чтобы сделать это, так как я все еще не смог бы вырваться из этого события. Я понимаю, что оператор break должен фактически содержаться в цикле, который нужно сломать, а не записываться в другую функцию, вызываемую из цикла.
Любые предложения приветствуются. Я надеюсь, что что-то будет сделано с обработкой событий или что я упустил что-то более простое. Благодаря!
Вместо этого вы можете попробовать http://codereview.stackexchange.com/. – tnw
Спасибо. Я не знал об этом! –
Это консольная программа? Если да, зачем внедрять меню из командной строки? И Winform, и Webforms сделали бы это нить. и для этого они были созданы. – RBarryYoung