2017-05-21 4 views
2

C#の初心者で、現在はコンソールアプリケーションで作業中です。私は、日付を入力するようにユーザーに依頼するが、日付の時間に変換できない文字列を入力すると、再試行を要求されるようにするにはどうすればよいですか?私はこれがif/else文では簡単だと知っていますが、アプリケーションがこのような何百もの質問を持っていれば、データ型が正しいかどうかを確認するためにifステートメントを何百も持っているようには思えません。私は逃したか、これを実行するための "ハック"を構築したものがありますか?ユーザーが正しいデータ型を入力していることを確認します。 C#Console App

例えば

Console.WriteLine("What is your birthday"); 

Datetime bday = Convert.ToDateTime(Console.ReadLine()); 

ユーザーは "dfio" と言う入ります。

+1

あなたのアプリケーションが何百もの質問をユーザに尋ねるのはもっと心配でしょう - 悪いUXデザインのようです – UnholySheep

答えて

1

あなたは

public static int GetInt() 
{ 
    int X; 
    String Result = Console.ReadLine(); 
    while(!Int32.TryParse(Result, out X)) 
    { 
     Console.WriteLine("Not a valid Int, try again!"); 
     Result = Console.ReadLine(); 
    } 
    return X; 
} 

のような関数を記述し、それを複数回使用することができます。あなたのケースでは

DateTime)あなたが唯一の有効な日時が入力されるまで、この意志ループ

public static DateTime GetDateTime() 
{ 
    DateTime X; 
    String Result = Console.ReadLine(); 
    while(!DateTime.TryParse(Result, out X)) 
    { 
     Console.WriteLine("Not a valid DateTime, try again!"); 
     Result = Console.ReadLine(); 
    } 
    return X; 
} 
0

文字列として入力するToString()メソッドを使用します。 日時bday = Convert.ToDateTime(Console.ReadLine()。ToString());

+0

['Console.ReadLine()'](https://msdn.microsoft.com/en-us/library) /system.console.readline(v=vs.110).aspx)はすでに 'string'を返します。なぜ' string'に変換する必要がありますか? – UnholySheep

+0

文字列の入力が間違った形式になっている場合、これはFormatExceptionをスローします。これは質問と全く同じ問題です。 – benPearce

+0

はい、正確に定義する必要があります。 –

1
bool valid = false; 
DateTime bday; 
while(!valid){ 
    Console.WriteLine("What is your birthday"); 
    string input = Console.ReadLine(); 

    if (DateTime.TryParse(input, out bday)) 
    { 
    Console.WriteLine("Invalid Date"); 
    valid = true; 
    } 
} 

にコードを変更する必要があります。

Thisマニュアルページは、パーサーにカスタムフォーマットを提供するのに役立ちます。

これは、この特定の入力に対する唯一の解決策です。

関連する問題