2016-08-16 155 views
0

我想让我的程序从命令行参数运行,所以我有3个选项可以在我的代码中选择运行。c#命令行参数

问题是我想解析端口以及参数,我该怎么做?

每个选项都有不同的程序配置。我的尝试如下所示;所以在程序里面我也想通过端口作为参数,所以当我在控制台中写入“program 1 5656”时。应用程序看到它的第一个选项1运行,然后将5656分析到端口变量中。

我试过以下,但是当我输入命令它给了我错误的选择,因为它启动选项2,而不是1

class MainClass 
{ 
    static void Main(string[] args) 
    { 
     // Test if input arguments were supplied: 
     if (args.Length == 1) 
     { 
      int port = int.Parse(args[1]); 
      server = new TcpListener(IPAddress.Any, port); 
      //Rest of the program 
     } 
     if (args.Length == 2) 
     { 
      int port = int.Parse(args[2]); 
      server = new TcpListener(IPAddress.Any, port); 
      //Rest of the program 
     } 
     if (args.Length == 3) 
     { 
      int port = int.Parse(args[3]); 
      server = new TcpListener(IPAddress.Any, port); 
      //Rest of the program 
     } 
    } 
} 
+1

好吧所以最新的问题是什么? – BugFinder

+0

问题是我想解析端口和参数,我该怎么做? (更新了问题 – Freon

+2

数组是0索引 – Sayse

回答

0

这是,你想要什么?

class MainClass 
{ 
    static void Main(string[] args) 
    { 
     // Test if input arguments were supplied: 
     var switchvalue = int.Parse(args[0]); 
     if (switchvalue == 1) 
       { 
      int port = int.Parse(args[1]); 
      server = new TcpListener(IPAddress.Any, port); 
      //Rest of the program 
     } 
     if (switchvalue == 2) 
     { 
      int port = int.Parse(args[1]); 
      server = new TcpListener(IPAddress.Any, port); 
      //Rest of the program 
     } 
     if (switchvalue == 3) 
     { 
      int port = int.Parse(args[1]); 
      server = new TcpListener(IPAddress.Any, port); 
      //Rest of the program 
     } 
    } 
} 
+0

有点像那样,但是当我键入“程序1 1234”它只是挂起,没有错误。当我在Vstudio上运行时,它给了我索引超出了数组的范围。 – Freon

+0

啊,是啊忘了把参数改为1.它现在有效。很难解释我想要什么,但是谢谢。不知道你可以很容易地使用switch语句作为参数传递[0] – Freon

1

看来,要port作为最后参数:

static void Main(string[] args) { 
    // if we have parameters... 
    if (args.Length > 0) { 
     //TODO: int.TryParse is a better choice 
     int port = int.Parse(args[args.Length - 1]); // ... port is the last one 
     server = new TcpListener(IPAddress.Any, port); 
     // Rest of the program 
    } 
    } 

编辑:如果你想通过只有两个参数optionport

static void Main(string[] args) { 
    if (args.Length == 2) { 
     //TODO: int.TryParse is a better choice 
     int option = int.Parse(args[0]); 
     int port = int.Parse(args[1]); 

     // Rest of the program, e.g. 
     if (option == 1) { 
     ... 
     } 
     else if (option == 2) { 
     ... 
     } 
     else if (option == 3) { 
     ... 
     } 
    } 
    } 
+0

因此,这使我可以选择每个配置,所以如果我选择选项一,我会写“程序1 1234”1是第一个配置/选项,1234是端口的最后一个参数。 – Freon

+0

@Freon:是的,就我所见,从你的代码中,你正在寻找类似的东西,'port'是最后一个参数 –

+0

因为和以前一样,我通过控制台上的用户输入来获得它,选项==“1”){//其余程序}。现在我想要做同样的事情,只是传递参数。无论如何,当我运行你的版本时,它总是给我第一个选项,我不能选择选项2 – Freon