GetCommandLineArgs没有返回我的预期

时间:2014-02-18 02:03:07

标签: c#

我最近开始通过这本书学习C#,我来到这个例子,我正在尝试打印从命令提示符传递的参数:

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

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

我的命令提示符输入如下所示:

D:\ ... \ SimpleCSharpApp \ bin \ Debug> SimpleCSharpApp.exe arg1 arg2

输出如下所示:

Arg:SimpleCSharpApp.exe

Arg:arg1

Arg:arg2

我认为它看起来像是:

Arg:arg1

Arg:arg2

我的问题是,为什么它将我的执行命令识别为字符串参数的成员?为了得到我预期的输出,我应该改变什么?

我可以将foreach循环从第二个元素开始改为for循环,如下所示:

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循环打印出来以获得我期望的输出吗?

提前致谢!

2 个答案:

答案 0 :(得分:15)

这是documented行为

  

数组中的第一个元素包含正在执行的程序的文件名。如果文件名不可用,则第一个元素等于String.Empty。其余元素包含在命令行中输入的任何其他标记。

如果您想跳过第一个参数,请使用Skip扩展方法。

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

答案 1 :(得分:-1)

你可以使用传递给main的参数:

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