私はその特徴の1つが次のようなプログラムを書いています:それを受け取る同じタイプの変数ではないデータ入力のためにエラーは発生しません。したがって、ユーザーがプロンプトで1つのデータ型のみを入力できるようにする方法を知っています。使い方はもう知っていますがtry-catch
、使いたくないです。
編集:
ユーザーはfloatタイプの値のみを入力する必要があります
例を挙げてください。
私はその特徴の1つが次のようなプログラムを書いています:それを受け取る同じタイプの変数ではないデータ入力のためにエラーは発生しません。したがって、ユーザーがプロンプトで1つのデータ型のみを入力できるようにする方法を知っています。使い方はもう知っていますがtry-catch
、使いたくないです。
編集:
ユーザーはfloatタイプの値のみを入力する必要があります
例を挙げてください。
すべてのコマンドラインパラメータは文字列であるため、解析のみが可能です。float値が必要な場合は、次のようにします。
float f;
bool success = Float.TryParse(parameter, out f);
if(success)
{
....
}
else
{
....
}
TryParseが成功した場合、値はfに割り当てられます。それ以外の場合、f==0.0。
このようなもの
string usrInput = Console.ReadLine();
while(!isValid(usrInput))
{
Console.Write("Invalid Input. Enter a valid value");
usrInput = Console.ReadLine();
}
//continue to use input here
有効な関数を書く
private void isValid(string input)
{
//use regex
//use something else
//if test passed return true
//return false
}
try-catchブロックを必要としない最も簡単な方法は、入力の解析を試み、入力が正常に解析されたかどうかに基づいて制御フローの決定を行うことです。たとえば、ユーザー入力が正常に解析されていないときに、有効な入力を継続的に要求できます。
float myValue;
do
{
Console.WriteLine("Enter a valid value: ");
} while (!Float.TryParse(Console.ReadLine(), out myValue))
// myValue contains a valid float, do something with it now...
float percent = myValue / 100.0f;
.NETのすべての数値タイプにはTryParse
メソッドが含まれているため、他の入力タイプがある場合は、それに応じて例を変更できます(、、Integer.TryParse()
などDouble.TryParse()
)。
コンソールはテキストのみを読み取ります。ユーザーが特定のタイプのデータのみを入力するようにする場合は、TryParseメソッドを使用するGetDate()などの一般的なメソッドを作成し、ユーザーがそのタイプに解析できる文字列を入力するまでループすることをお勧めします。
独自のコマンドエスケープ戦略で作業する必要があります。これにより、エスケープをGetDate()を呼び出したメソッドにフィードバックして、ユーザーがエスケープしたことを通知します。