在控制台应用程序中读取命令行参数的最佳方法

21

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

这只是个人偏好还是第二种方法现在更好?

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的问题。

4个回答

23

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

此外,我不喜欢第一种方式中将参数放入方法参数的"魔法"。


1
单一职责原则加1。 - Randy Eppinger
1
它可以在main()方法之外使用。但是当您想要实例化类并调用它时会发生什么?您必须通过命令行调用它,否则它会忽略您的参数,对吗?是否最好拥有多个签名,一个带有传入参数,另一个没有;其中没有的将从System.CommandLine中提取它们并传递给另一个? - Michael Paulukonis
@michael,当然,我不会在“Core”程序集中调用该方法,只会在控制台项目中调用。我更多地是考虑创建一个类似于设置类或等效类的东西,它将负责以可用于应用程序其余部分的方式解析参数。 - David Thibault

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

3

2

对我来说,第一种方法似乎更直观,因为自从我开始使用C/C++以来就一直这样做。

如果你的命令行有太多的开关,请看看Thomas推荐的getopt。它非常有用。我还没有看过C#移植版。

问候,

kgr


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接