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

时间:2011-05-27 10:35:59

标签: c# .net command-line-arguments

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

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

11 个答案:

答案 0 :(得分:43)

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

但我只想指出differant way for passing args为主要方法

在视觉工作室

  1. right click on project然后选择Properties
  2. 转到debug tab,然后在start options部分为您的工具提供应用
  3. 喜欢这个图片

    Properties window

    并且知道秘密很开心

答案 1 :(得分:21)

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

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

这有助于调用方法

参数以C:\AppName arg1 arg2 arg3

的形式传递

答案 2 :(得分:13)

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

如果你打电话

myApp.exe arg1 arg2 arg3

主方法获取

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

答案 3 :(得分:9)

  

主叫如何?

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

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

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

  

如何将args传递给main方法

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

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

因此,MyConsoleApp.exe value01 value02意味着你的args参数有2个元素:

[0] = "value01"

[1] = "value02"

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

希望这会有所帮助。

补充阅读:

Creating Console Applications (Visual C#)

Command-Line Arguments (C# Programming Guide)

答案 4 :(得分:3)

在视觉工作室中你也可以这样做,简单地通过或避免使用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("]");
            }
        }

答案 5 :(得分:1)

args可以通过命令行传递,也不会有args。

答案 6 :(得分:1)

命令行参数是传递参数的一种方法。This msdn示例值得一试。 命令行参数的MSDN Page也值得一读。

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

答案 7 :(得分:1)

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

enter image description here

答案 8 :(得分:1)

阅读MSDN

它还包含指向args的链接。

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

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

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

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

答案 9 :(得分:0)

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

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

答案 10 :(得分:0)

你也可以通过make函数传递然后在这个函数中你调用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));
    }
相关问题