2017-07-27 49 views
0

我目前正在搞乱一个控制台应用程序,我有一些逻辑来获取用户输入3种不同的东西。我设计了应用程序,以便用户可以随时键入'Q'或'q'来退出程序。然而,我目前正在完成的方式是通过if语句在每个用户输入之后(使用Console.ReadLine()。)当Console.ReadLine()执行时,C#控制台应用程序执行代码

我认为最好的解决方案是在一个地方放一段代码它退出程序并在执行ReadLine()时自动调用,并检查输入是否为'q'或'Q'。我很好奇,如果有什么办法做这样的事情?

下面是代码我现在

Console.WriteLine("Please give me a source and destination directory...(Enter 'Q' anytime to exit)"); 

     Console.Write("Enter source path: "); 
     _sourcePath = Console.ReadLine(); 
     if (_sourcePath.Equals("q", StringComparison.CurrentCultureIgnoreCase)) 
     { 
      Environment.Exit(Environment.ExitCode); 
     } 

     Console.Write("Enter destination path: "); 
     _destinationPath = Console.ReadLine(); 
     if (_destinationPath.Equals("q", StringComparison.CurrentCultureIgnoreCase)) 
     { 
      Environment.Exit(Environment.ExitCode); 
     } 

     Console.Write("Do you want detailed information displayed during the copy process? "); 
     string response = Console.ReadLine(); 
     if (response.Equals("q", StringComparison.CurrentCultureIgnoreCase)) 
     { 
      Environment.Exit(Environment.ExitCode); 
     } 

     if (response?.Substring(0, 1).ToUpper() == "Y") 
     { 
      _detailedReport = true; 
     } 

这将是很好的,如果块将其删除,只是有从到Console.ReadLine输入值()被执行时,它检查...

+0

为什么不写自己的函数,进而调用'到Console.ReadLine()'(以及做其余的逻辑)? – maccettura

回答

1

您可以创建一个函数来获取用户的输入,并在Console.ReadLine()返回之前对输入进行任何处理(在'q'上退出)之后。

static void Main(string[] args) 
{ 
    Console.Write("Enter source path: "); 
    var _sourcePath = GetInput(); 

    Console.Write("Enter destination path: "); 
    var _destinationPath = GetInput(); 

    Console.Write("Do you want detailed information displayed during the copy process? "); 
    var response = GetInput(); 

    var _detailedReport = response?.Substring(0, 1) 
     .Equals("y", StringComparison.CurrentCultureIgnoreCase); 
} 

private static string GetInput() 
{ 
    var input = Console.ReadLine(); 
    if (input.Equals("q", StringComparison.CurrentCultureIgnoreCase)) 
     Environment.Exit(Environment.ExitCode); 
    return input; 
} 
1

恐怕没有直接的方法挂钩ReadLine()调用。结束语一切都在你所谓的“的ReadLine”自己的方法可以工作,虽然,这样说

static string ReadLine() 
{ 
    string line = Console.ReadLine(); 

    if (line.Equals("q", StringComparison.CurrentCultureIgnoreCase)) 
    { 
     Environment.Exit(Environment.ExitCode); 
    } 
    //Other global stuff 

    return line; 
} 

//Elsewhere 
Console.Write("Enter source path: "); 
_sourcePath = ReadLine(); //Note: No 'Console.' beforehand. This is your method! 
Console.Write("Enter destination path: "); 
_destinationPath = ReadLine(); 
Console.Write("Do you want detailed information displayed during the copy process? "); 
string response = ReadLine(); 

if (response?.Substring(0, 1).ToUpper() == "Y") 
{ 
    _detailedReport = true; 
} 
相关问题