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

.net 在控制台应用程序中读取命令行参数的最佳方法,.net,command-line,parameters,.net,Command Line,Parameters,下面是两种读取命令行参数的方法。第一个是我习惯于看到的主要使用参数的方式。第二次是我在查看代码时偶然发现的。我注意到第二个将数组中的第一项分配给路径和应用程序,但第一个跳过了这一点 这只是偏好还是第二种方式现在更好 Sub Main(ByVal args() As String) For i As Integer = 0 To args.Length - 1 Console.WriteLine("Arg: " & i & " is " & args

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

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

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

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


另外,我不喜欢第一种方法将参数放在方法参数中的“魔力”。

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

你知道getopt吗?codeplex上有一个C#端口:

对我来说,第一种方法似乎更直观,因为这就是我从C/C++时代以来一直在做的事情

如果您的命令行有太多的开关,请查看Thomas推荐的getopt。它很有用。不过,我还没有看过同样的C#port

问候,


kgr

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