我在几个控制台应用程序上继承了维护,这些应用程序很自然地使用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]
答案 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()
方法应该处理参数,并在必要时将它们传递给应用程序的其余部分。