2014-02-18 94 views
1

最近,我開始通過這本書學習C#和我來到這個例子我想打印出從命令提示符傳遞的參數:GetCommandLineArgs沒有返回我的預期

​​

我的命令提示符輸入看起來是這樣的:

d:\ ... \ SimpleCSharpApp \ BIN \調試> SimpleCSharpApp.exe ARG1 ARG2

而且輸出看起來是這樣的:

精氨酸:SimpleCSharpApp.exe

精氨酸:ARG1

精氨酸:ARG2

我認爲它看起來就像是:

精氨酸:ARG1

Arg:arg2

我的問題是,爲什麼它會將我的執行命令識別爲字符串參數的成員?我應該改變什麼來獲得我期望的輸出?

我可能只是改變foreach循環轉化爲循環從這樣的第二個元素開始:

namespace SimpleCSharpApp 
{ 
    class Program 
    { 
     static void Main() 
     { 
      string[] theArgs = Environment.GetCommandLineArgs(); 

      for (int i = 1; i < theArgs.Length; i++) 
      { 
       Console.WriteLine("Arg: {0}", theArgs[i]); 
      } 
     } 
    } 
} 

但這並沒有解決我的好奇心,我能以某種方式使其不記錄可執行文件一樣的參數,並用foreach循環打印出來以獲得我期望的輸出結果?

在此先感謝!

回答

13

這是documented行爲

數組中的第一個元素包含了執行程序的文件名。如果文件名不可用,則第一個元素等於String.Empty。其餘元素包含在命令行中輸入的任何附加標記。

如果要跳過第一個參數,請使用Skip擴展方法。

foreach(string arg in theArgs.Skip(1)) 
      Console.WriteLine("Arg: {0}", arg); 
+0

謝謝你,這有助於很多! – msmolcic

+1

+1對於跳過:-) – Dayan

+1

正是!在我允許的時候,我會選擇這個作爲最好的答案,再次感謝! :) – msmolcic

-1

你可以只使用傳遞給主的ARGS:

static void Main(string[] args) 
{ 
    foreach(string arg in args) 
      Console.WriteLine("Arg: {0}", arg); 
} 
+0

是的,我知道,這是我在這個例子之前學到的東西,但我想知道如何用這種方式來做。謝謝! – msmolcic