【问题标题】:Console app arguments, how arguments are passed to Main method控制台应用程序参数,如何将参数传递给 Main 方法
【发布时间】:2011-09-03 07:24:51
【问题描述】:

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

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

【问题讨论】:

  • 这个有用的article 的前半部分只是将参数传递给简单的控制台应用程序

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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    这有助于调用方法

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

    【讨论】:

      【解决方案3】:

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

      如果你打电话

      myApp.exe arg1 arg2 arg3
      

      Main方法得到一个数组

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

      【讨论】:

        【解决方案4】:

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

        在 Visual Studio 中,您可以通过选择控制台应用程序的属性然后选择“调试”选项卡来设置命令行参数

        【讨论】:

        • 这就是我一直在寻找的答案,如何在VS中将参数传递给Main方法调试。
        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

          阅读MSDN

          它还包含指向参数的链接。

          简短回答: 不,主要不会被覆盖。当 Visual Studio(实际上是编译器)构建您的 exe 时,它​​必须声明程序集的起点,该起点是主要功能。

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

          主要是你需要阅读这些参数,例如:

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

          【讨论】:

            【解决方案7】:

            ma​​in是怎么调用的?

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

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

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

            args是如何传递给main方法的

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

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

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

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

            如何解析和使用输入值取决于您。

            希望这会有所帮助。

            补充阅读:

            Creating Console Applications (Visual C#)

            Command-Line Arguments (C# Programming Guide)

            【讨论】:

              【解决方案8】:

              你也可以通过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));
                  }
              

              【讨论】:

                【解决方案9】:

                在 Visual Studio 中,您也可以这样做以简单地传递或避免命令行参数

                 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("]");
                            }
                        }
                

                【讨论】:

                  【解决方案10】:

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

                  但我只想指出将参数传递给主方法的不同方式

                  在视觉工作室

                  1. 右键单击项目,然后选择属性
                  2. 转到 Debug 选项卡,然后在 Start Options 部分为应用提供您的参数

                  喜欢这张图片

                  很高兴知道秘密

                  【讨论】:

                  • 对像我这样的 C# 菜鸟来说非常棒的建议!谢谢,真的很有帮助。
                  猜你喜欢
                  • 2012-05-08
                  • 1970-01-01
                  • 1970-01-01
                  • 2011-05-03
                  • 1970-01-01
                  • 1970-01-01
                  • 2014-04-20
                  • 2019-03-17
                  • 2015-05-02
                  相关资源
                  最近更新 更多