34

私はこのコードを持っています:

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)ましたが、まだ機能しません。

基本的に、ユーザーが引数を指定してプログラムを呼び出したかどうかを調べたいと思います。そうでない場合、プログラムは入力を求めます。

これどうやってするの?前もって感謝します。

4

6 に答える 6

54

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

于 2012-08-03T08:23:33.830 に答える
11
if(args == null || args.Length == 0)
{
    // no arguments
}
else
{
    // arguments
}
于 2012-08-03T08:24:13.347 に答える
5

これは配列であり、引数が渡されないという意味を持つシナリオが 2 つあります。セマンティクスに応じて

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

この場合、プログラムの実行時にメソッドが呼び出される場合 (たとえば、単体テストの一部としてメソッドを呼び出さない場合)、args 引数が null になることはありません (最初のテストが冗長になります)。メイン以外のメソッドでも同じ状況に遭遇しやすい

それらをその順序でテストすると、後者の式でargsがnullになることを心配する必要はありません

if(args == null || args.Length == 0){
    ComputeNoParam cptern = new ComputeNoParam();
    cptern.ComputeWithoutParameters();
}
else
{
    ComputeParam cpter = new ComputeParam();
    foreach (string s in args){...}
}
于 2012-08-03T08:26:08.630 に答える
4

これも機能するはずです:

if (args.Length < 1)
{
    //no args passed
}
于 2012-08-03T08:27:18.543 に答える