2012-08-03 11 views
14

している場合:C#のチェック、私はこのコードを持っている引数を渡すか

public static void Main(string[] args) 
{   
    if (string.IsNullOrEmpty(args[0])) // Warning : Index was out of the bounds of the array 
    { 
     ComputeNoParam cptern = new ComputeNoParam(); 
     cptern.ComputeWithoutParameters(); 
    } 
    else 
    { 
     ComputeParam cpter = new ComputeParam(); 
     foreach (string s in args){...} 
    } 
} 

if(args.Length==0)を試してみましたが、それはまだ動作しません。

基本的に私は、ユーザーが引数を使用してプログラムを呼び出したかどうかを確認します。そうでなければ、プログラムは入力を要求する。

どうすればいいですか? ありがとうございます。

+3

'args.Length == 0'を試してみたらどうなりますか? –

+2

'args.Length == 0'ではどうしましたか?未来のための謙虚なヒント:「うまくいきません」と言えば、それだけでは問題の説明が十分ではありません。手の込んだ、動作しないものを言う、それは動作しませんどのように、あなたが期待していないことを代わりに何が起こるのか、など=) –

+0

あなたが '')args.Length == 0(場合を使用する場合、そしてそれはdoesnのそれは仕事の代わりに何をするのですか? – phoog

答えて

28

if(args.Length==0)args[0]がクラッシュしないように、少なくとも一つの引数を必要とし、動作するはずです。

8
if(args == null || args.Length == 0) 
{ 
    // no arguments 
} 
else 
{ 
    // arguments 
} 
4

これは配列であり、引数が渡されないという意味の2つのシナリオがあります。 (あなたのセマンティクスプログラムはargs引数がnullになることはありません(例えばユニットテストを言うの一部としてメソッドを呼び出していない)が実行されたときにメソッドが呼び出される。この場合

args == nullまたはargs.Length == 0

に応じて、最初のテストを冗長にする)同じ状況が他のメソッドでメイン以外のメソッドで簡単に発生する可能性があるため完全性のためにインクルードしました。

このテストでは、argsがnullであることを心配する必要はありません。後者の表現

if(args == null || args.Length == 0){ 
    ComputeNoParam cptern = new ComputeNoParam(); 
    cptern.ComputeWithoutParameters(); 
} 
else 
{ 
    ComputeParam cpter = new ComputeParam(); 
    foreach (string s in args){...} 
} 
+0

でした – levteck

4

また、これは動作するはずです:

if (args.Length < 1) 
{ 
    //no args passed 
} 
-1

別の利用可能なオプションすでにSystem.Linqを使用している場合は、例えば、Any()拡張を利用することである。

public static void Main(string[] args) 
{ 
    if (args == null && !args.Any()) 
    { 
     // No parameters passed. 
     ComputeNoParam cptern = new ComputeNoParam(); 
     cptern.ComputeWithoutParameters(); 

     return; 
    } 

    // process parameters 
    ComputeParam cpter = new ComputeParam(); 
    foreach (string s in args){...} 
} 

これも書くことができます。

public static void Main(string[] args) 
{ 
    if (!args?.Any() ?? true) 
    { 
     // No parameters passed. 
     ComputeNoParam cptern = new ComputeNoParam(); 
     cptern.ComputeWithoutParameters(); 

     return; 
    } 

    // process parameters 
    ComputeParam cpter = new ComputeParam(); 
    foreach (string s in args){...} 
} 

これはあなたに利用可能な別のオプションを示しています。私はgoinと同意します.Lengthとグラム、私は、ヌルチェックを削除し、代わりに、条件付きアクセスを使用するでしょうが。

関連する問題