(string [] args)和System.Environment.CommandLine之间有什么区别?

时间:2012-06-14 19:00:28

标签: .net parameters command-line-arguments

我在几个控制台应用程序上继承了维护,这些应用程序很自然地使用static void Main(string[] args)输入。但是,代码会忽略args数组,而是从System.Environment.CommandLine读取命令行参数。

这里有功能差异吗?

内容看起来完全相同。如果有的话,我会怀疑通过调用System.Environment.CommandLine会有一分钟的性能损失(但还不够,我会关注或关心到足够的测量)。


更新:我怀疑System.Environment.CommandLine应该包含可执行路径,但我没有看到它......因为我看错了地方。代码ALSO已string[] arrCmdLine = System.Environment.GetCommandLineArgs(); .... System.Environment.CommandLine.ToLower()检查是否存在“debug”,而所有其他参数都是从GetCommandLineArgs()中提取出来的,而我正在精神上将两者混淆“为什么不使用args[]?”

多年来,我一直在为解析命令行args的最佳方式而烦恼,因为它始终是“按照正确的顺序放置它们!” [JK]

1 个答案:

答案 0 :(得分:9)

System.Environment.CommandLine将可执行文件和参数包含为单个字符串。

// Sample for the Environment.CommandLine property.
using System;

class Sample 
{
    public static void Main() 
    {
    Console.WriteLine();
//  Invoke this sample with an arbitrary set of command line arguments.
    Console.WriteLine("CommandLine: {0}", Environment.CommandLine);
    }
}
/*
This example produces the following results:

C:\>env0 ARBITRARY TEXT

CommandLine: env0 ARBITRARY TEXT
*/

http://msdn.microsoft.com/en-us/library/system.environment.commandline.aspx

args参数是一个参数数组。因此,虽然您可以解析System.Environment.CommandLine中的各个参数,但我不确定您为什么要这样做。我能看到的唯一原因是你需要访问Main()以外的参数,这无论如何都可能是一个坏主意。您的Main()方法应该处理参数,并在必要时将它们传递给应用程序的其余部分。