繁体   English   中英

c# 如何在命令行中使用 int 参数

[英]c# How do I take an int argument at the command line

我想在命令行中运行我的程序

dotnet program.dll --number 8 

这是我当前代码的一部分

else if (args[i] == "--number")
{
    if (0 > Convert.ToInt32(args[i+1]))
    {
        num1 = Convert.ToInt32(args[i + 1]);
    }
    else
    {
        num1 = 10; //default
        Console.WriteLine("The number value must be above 0. Returning to default value");
    }
}

但是,由于args[]string[] ,命令行表明不接受参数8 我想知道如何避免这种情况或在调用后正确使用"--number"输入来获取 int 输入

您可以执行int.TryParse而不是Convert.ToInt32 您可以测试三种可能性:

  1. 参数太少: dotnet program.dll --number
  2. 无效数字: dotnet program.dll --number bla-bla-bla
  3. 非正数: dotnet program.dll --number 0

代码:

else if (args[i] == "--number") {
  if (args.Length <= i + 1) {
    // dotnet program.dll --number 
    num1 = 10;

    Console.WriteLine("Too few parameters, no number found. Returning to default value");
  }
  else if (!int.TryParse(args[i + 1], out num1)) {
    // dotnet program.dll --number bla-bla-bla
    num1 = 10;
     
    Console.WriteLine("The number must be a positive integer. Returning to default value");   
  }

  if (num1 <= 0) {
    // dotnet program.dll --number 0
    num1 = 10;

    Console.WriteLine("The number value must be above 0. Returning to default value");   
  } 

  // from now on, num1 is a positive integer number
}

这是另一种常见的方法:

for(int i=0; i<args.Length; i++)
{
    if (args[i].StartsWith("--"))
    {
        switch (args[i].ToLower())
        {
            case "--number":
                if ((i + 1) < args.Length)
                {
                    int number;
                    string strNumber = args[i + 1];
                    if (int.TryParse(strNumber, out number))
                    {
                        if(number > 0)
                        {
                            // ... do something with "number" ...

                        }
                        else
                        {
                            // number was not positive
                            Console.WriteLine($"--number Parameter ({args[i+1]}) was not positive!");
                        }
                    }
                    else
                    {
                        // parameter failed to convert to an integer
                        Console.WriteLine($"--number Parameter ({args[i+1]}) was not a valid Integer!");
                    }
                }
                else
                {
                    // too few arguments - no parameter to go with command
                    Console.WriteLine("No parameter provided for --number command!");
                }
                break;

            case "--otherparameter":

                break;

            default:
                // unrecognized command was encountered
                Console.WriteLine($"Unrecognized command: {args[i]}");
                break;
        }
    }      
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM