2017-04-26 7 views
0

私は別のプログラムによって呼び出されるC#-Console-Programを持っています。C#コンソール - 引数が渡されなかった場合、ユーザー入力を受け取ります

他のプログラムは、プログラムに引数を渡すことになっています。

ここで、プログラムに引数が渡されない場合、Main関数の文字列配列argsにユーザーが引数を入力するようにしたいと考えています。

私はあなたがそれはそれで何かを持っているかどうかを確認するためにargs文字列の長さをチェックしたり、このようなことができないことを知っている:

if(args.Length == 0){} 

をしかし、私は、ユーザーが入力できるように、それを得るように見えるいけません新しい値をコンソールに入力してargsアレイに追加します。

私はすでにこのようにそれを試してみました:

if(args.Length == 0) 
     { 
      args[0] = Console.ReadLine(); 
     } 

しかし、インデックスが範囲外でありますので、それだけでエラーがスローされます。

argsアレイにインデックスを追加する方法や、このようなケースを処理する他の方法はありますか?または、コードを書き直してargs -Arrayを直接実行するのではなく、代わりに配列に引数が含まれているかどうかをチェックし、新しい配列を作成しない場合は書き直す必要がありますか?

+1

説明したとおりにコードを書き直す必要があります。 –

+0

です。なぜなら、args [0]が初期化されていれば、あなたの長さは実際に1であるからです。 – Behzad

+0

つまり、args [0]に新しいオブジェクトのインスタンスを作成する必要があります。 – Behzad

答えて

3

より良いアプローチは、次のようになります。

String username, password; 

if (args.Length >= 1) username = args[0]; 
else username = Console.ReadLine(); 

if (args.Length >= 2) password = args[1]; 
else password = Console.ReadLine(); 

あなたの代わりにダム配列の意味のある変数を取得そのように。

2
if (args.Length == 0) 
    { 
     // args[0] does not exist because it is an empty array. 
     // assign it with an new array of string instead. 
     args = new string[] { Console.ReadLine(), }; 
    } 
+0

値渡しのパラメータの変更はひどい考えです。私はそれをしない一般的なルールを作るあなたを燃やすことができる非常に多くの方法があります。 LINQの遅延実行の仕組みにより、入力パラメータを変更すると無限ループになりました。これは、あなたがデバッグして元の値を見る必要があるか、またはいくつかの奇妙なバグが上がり、その原因が完全にはっきりしない限り、行うのは完全に合理的なものです。 –

関連する問題