簡體   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