当前位置: 首页 > 编程语言 > C#

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

时间:2023-04-10 10:45:19 C#

为什么C#处理命令行参数不一致?在C#中,直接从Main()获取命令行参数会省略exe名称,这与C传统相反。通过Environment.GetCommandLineArgs获取相同的命令行参数包括它。对于这种明显的不一致,我是否遗漏了一些理由?类程序{staticvoidMain(string[]args){Console.WriteLine(string.Format("args.Length={0}",args.Length));foreach(args中的字符串arg){Console.WriteLine(string.Format("args={0}",arg));}Console.WriteLine("");字符串[]Eargs=Environment.GetCommandLineArgs();Console.WriteLine(string.Format("Eargs.Length={0}",Eargs.Length));foreach(Eargs中的字符串arg){Console.WriteLine(string.Format("Eargs={0}",arg));}}}输出:C:\ConsoleApplication1ConsoleApplication1binDebug>consoleapplication1xxzzaaargs.Length=3args=xxargs=zzargs=aaEargs.Length=4Eargs=consoleapplication1Eargs=xxEargs=zzEargs=aa因为它不是C,它不依赖于它的约定。需要exe名称几乎是一种边缘情况;我很少需要它(与其他参数相比),IMO证明了忽略它的决定是合理的。这是规范中的额外要求(ECMA334v4,§10.1);(切到相关部分):10.基本概念10.1应用程序启动...此入口点方法始终命名为Main,并且应具有以下签名之一:staticvoidMain(){...}staticvoidMain(string[]args){...}staticintMain(){...}staticintMain(string[]args){...}...?设args为参数的名称。如果args指定的数组长度大于零,则数组成员args[0]到args[args.Length-1](含)应引用称为应用程序参数的字符串,这些字符串由给定的实现定义主机值应用程序启动前的环境。目的是在应用程序启动之前从托管环境中的其他地方提供某些应用程序信息。如果主机环境不能提供包含大写和小写字母的字符串,则实现应确保以小写形式接收字符串。[注意:在支持命令行、应用程序的系统上,应用程序参数对应于通常所说的命令行参数。尾注][status-by-design]-http://msdn.microsoft.com/en-us/library/acy3edy3(v=VS.100).aspx与C和C++不同,程序的名称未被处理作为第一个命令行参数。对我来说,这两种方法返回不同结果的原因是上下文。归根结底,只有一种方法可以同时获得这两种选择。以上是C#学习教程:为什么C#会处理不一致的命令行参数?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: