【问题标题】:Best way to read commandline parameters in console application在控制台应用程序中读取命令行参数的最佳方式
【发布时间】:2008-09-17 12:56:03
【问题描述】:

下面是两种读取命令行参数的方法。第一种是我习惯于在 main 中使用参数的方式。我在审查代码时偶然发现的第二个。我注意到第二个将数组中的第一项分配给路径和应用程序,但第一个跳过了这个。

只是偏好还是第二种方式现在更好?

Sub Main(ByVal args() As String)
    For i As Integer = 0 To args.Length - 1
        Console.WriteLine("Arg: " & i & " is " & args(i))
    Next

    Console.ReadKey()
End Sub



Sub Main()
    Dim args() As String = System.Environment.GetCommandLineArgs()

    For i As Integer = 0 To args.Length - 1
        Console.WriteLine("Arg: " & i & " is " & args(i))
    Next

    Console.ReadKey()
End Sub

我认为在 C# 中也可以做到这一点,所以这不一定是 vb.net 的问题。

【问题讨论】:

    标签: .net command-line parameters


    【解决方案1】:

    第二种方式更好,因为它可以在 main() 之外使用,所以当你重构时,它就少了一件需要考虑的事情。

    我也不喜欢第一种方式将 args 放在方法参数中的“魔术”。

    【讨论】:

    • + 1 表示单一职责原则
    • 它可以在main()方法之外使用,是的。但是当你想实例化类并调用它时会发生什么呢?您必须通过命令行调用它,否则它会忽略您的参数,对吗?有多个签名,一个带有传入参数,一个没有,不是更好吗?没有的人会从 System.CommandLine 中提取它们并传递给另一个人?
    • @michael,当然,我不会在“核心”程序集中调用该方法,只在控制台项目中调用。我更多地考虑使用诸如设置类或等效类之类的东西,它会以可用于应用程序的其余部分的方式解析参数。
    【解决方案2】:

    你知道getopt吗?在 codeplex 上有一个 C# 端口:http://www.codeplex.com/getopt

    【讨论】:

      【解决方案3】:

      第一种方法更好,因为它更简单。

      【讨论】:

        【解决方案4】:

        对我来说,第一种方法似乎更直观,因为我从 C/C++ 时代开始就是这样做的。

        如果您的命令行有太多开关,请查看 Thomas 推荐的 getopt。它非常有用。不过,我还没有看过相同的 C# 端口。

        问候,

        公斤

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-11-07
          • 1970-01-01
          • 2013-01-04
          • 2018-08-27
          • 1970-01-01
          • 1970-01-01
          • 2010-10-01
          • 1970-01-01
          相关资源
          最近更新 更多