2016-08-16 191 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