为什么C#处理命令行参数不一致?

时间:2010-12-14 17:00:16

标签: c# visual-studio command-line

在C#中,直接从Main()获取命令行参数省略了exe名称,这与C的传统相反。

通过Environment.GetCommandLineArgs获取相同的命令行参数包括它。

我是否因为这种明显的不一致而缺少一些合理的逻辑原因?

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine(string.Format("args.Length = {0}", args.Length));

        foreach(string arg in args)
        {
            Console.WriteLine(string.Format("args = {0}", arg));
        }

        Console.WriteLine("");

        string[] Eargs = Environment.GetCommandLineArgs();
        Console.WriteLine(string.Format("Eargs.Length = {0}", Eargs.Length));
        foreach (string arg in Eargs)
        {
            Console.WriteLine(string.Format("Eargs = {0}", arg));
        }

    }
}

输出:

C:\\ConsoleApplication1\ConsoleApplication1\bin\Debug>consoleapplication1 xx zz aa 
args.Length = 3 
args = xx
args = zz 
args = aa
Eargs.Length = 4 
Eargs = consoleapplication1 
Eargs = xx 
Eargs = zz 
Eargs = aa

3 个答案:

答案 0 :(得分:15)

答案 1 :(得分:8)

[status-by-design] - http://msdn.microsoft.com/en-us/library/acy3edy3(v=VS.100).aspx

  

与C和C ++不同,程序名称不被视为第一个命令行参数。

答案 2 :(得分:5)

对我而言,两种方法返回不同结果的原因是Context

  • Environment类用于操作当前的环境和进程,Environment.GetCommandLineArgs();返回可执行文件名称是有道理的,因为它是进程的一部分。

  • 至于args数组,对我来说,排除可执行文件名是有意义的。我知道我正在调用可执行文件,在运行我的应用程序的上下文中,我想知道发送给它的参数。

在一天结束时,有一种方法可以找到两种选择。