控制台应用程序参数,参数如何传递给Main方法

这将是来自c#beginner的问题。 当我创建控制台应用程序时,我得到带有参数args作为数组字符串的Main方法。 我不明白系统如何调用此方法以及如何将args传递给Main方法。 也许有人能解释一下? 是否重置了某种控制台类的Main方法?

namespace ConsoleApplication1 { class Program { static void Main(string[] args) { } } } 

Main方法是应用程序的入口点。 如果您通过ildasm结账

 .method private hidebysig static void Main(string[] args) cil managed { .entrypoint 

这有助于调用该方法

参数传递为C:\AppName arg1 arg2 arg3

所有答案都很棒,并且很好地解释了一切

但我只想指出differant way for passing args给main方法的不同方法

在视觉工作室

  1. right click on project然后选择“ Properties
  2. 转到debug tab然后在start options部分为应用程序提供args

喜欢这个图像

属性窗口

并且知道秘密

运行时拆分控制台在每个空间给出的参数。

如果你打电话

 myApp.exe arg1 arg2 arg3 

Main方法获取一个数组

 var args = new string[] {"arg1","arg2","arg3"} 

主叫怎么样?

当您使用控制台应用程序模板时,将编译代码,在启动对象中需要一个名为Main的方法,因为Main是市场作为应用程序的入口点。

默认情况下,在项目属性设置中未指定任何启动对象,默认情况下将使用Program类。 如果您愿意,可以在“构建”选项卡下的项目属性中更改此设置。

请记住,您指定为启动对象的对象必须具有名为Main的方法。

如何将args传递给main方法

接受的格式是MyConsoleApp.exe value01 value02等…

应用程序将每个空格后的每个值分配到参数数组的单独元素中。

因此,MyConsoleApp.exe value01 value02将表示您的args参数有2个元素:

 [0] = "value01" [1] = "value02" 

如何解析输入值并使用它们取决于您。

希望这有帮助。

补充阅读:

创建控制台应用程序(Visual C#)

命令行参数(C#编程指南)

在视觉工作室,你也可以这样做,简单地通过或避免comandline参数

  static void Main(string[] args) { if (args == null) { Console.WriteLine("args is null"); // Check for null array } else { args=new string[2]; args[0] = "welcome in"; args[1] = "www.overflow.com"; Console.Write("args length is "); Console.WriteLine(args.Length); // Write array length for (int i = 0; i < args.Length; i++) // Loop through array { string argument = args[i]; Console.Write("args index "); Console.Write(i); // Write index Console.Write(" is ["); Console.Write(argument); // Write string Console.WriteLine("]"); } } 

args可以通过命令行传递,也不会有args。 请参阅http://msdn.microsoft.com/en-us/library/acy3edy3%28v=vs.80%29.aspx

命令行参数是传递参数的一种方法。 这个 msdn示例值得一试。 命令行参数的MSDN页面也值得一读。

在visual studio中,您可以通过选择控制台应用程序的属性然后选择Debug选项卡来设置命令行参数

每个托管exe都有一个入口点,如果您将代码加载到ILDASM,则可以看到该入口点。 入口点在CLR标题中指定,看起来像这样。

在此处输入图像描述

阅读MSDN 。

它还包含args的链接。

简答:不,主要没有得到覆盖。 当visual studio(实际上是编译器)构建你的exe时,它必须为assmebly声明一个起点,那个点就是main函数。

如果你的意思是如何通过文法传递args然后你可以从命令行运行你的应用程序(例如appname.exe param1 param2)或在项目设置中输入它们(在Debug选项卡的命令行参数中)

在主要内容中,您需要阅读这些args,例如:

 for (int i = 0; i < args.Length; i++) { string flag = args.GetValue(i).ToString(); if (flag == "bla") { Bla(); } } 

运行时引擎的主要方法类似于int main(int argc, char *argv[]) ,其中argc是参数个数的计数,argv是指向每个参数的指针数组。 运行时引擎将其转换为c#更自然的forms。

在调用main方法之前,所有内容都是汇编语言。 它可以访问命令行参数(因为操作系统使每个进程都可以使用它),但是该汇编语言需要将完整命令行的单个字符串转换为多个子字符串(使用空格来分隔它们)准备将它们传递给main()。

您也可以通过创建函数传递然后在此函数中调用main方法并将参数传递给main方法

 static int Main(string[] args) { foreach (string b in args) Console.WriteLine(b+" "); Console.ReadKey(); aa(); return 0; } public static void aa() { string []aaa={"Adil"}; Console.WriteLine(Main(aaa)); }