2017-07-27 7 views
0

現在、コンソールアプリケーションを使いこなしていますが、3つの異なるものに対してユーザー入力を得るロジックがあります。私は、ユーザーがいつでもプログラムを終了するために 'Q'または 'q'をタイプできるようにアプリケーションを設計しました。しかし、私が現在達成しているのは、各ユーザの入力後に(Console.ReadLine()を使用して)if文を使用する方法です。Console.ReadLine()が実行されたときにC#コンソールアプリケーションがコードを実行する

私が考えた解決策は、 ReadLine()が実行されると自動的に呼び出され、入力が「q」か「Q」かを確認するためにチェックされます。私はこのような何かをする方法があれば好奇心でしたか?ここで

は、私はちょうどブロックとはConsole.ReadLine(からの着信値を持っている場合、削除するとよいでしょう今

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

を持っているコードです)、それが実行されたときにチェック...

+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; 
} 
関連する問題