Лучший способ читать параметры командной строки в консольном приложении

Ниже приведены два способа чтения параметров командной строки. Во-первых, я привык использовать параметр в файле 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.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
19
0
35 746
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Второй способ лучше, потому что его можно использовать вне main (), поэтому, когда вы проводите рефакторинг, думать о нем меньше.

Также мне не нравится "магия", которая первым образом помещает аргументы в параметр метода.

+1 к принципу единой ответственности

Randy Eppinger 28.04.2010 23:58

Да, его можно использовать вне метода main (). Но что происходит, когда вы хотите создать экземпляр класса и вызвать его? Вы должны вызывать его через командную строку, или он игнорирует ваши параметры, верно? не было бы лучше иметь несколько подписей, одну с переданными аргументами, а другую без; где один без извлечет их из System.CommandLine и передаст другому?

Michael Paulukonis 09.05.2011 20:10

@michael, конечно, я бы не стал размещать вызов этого метода в сборке "Core", только в консольном проекте. Я больше думал о том, чтобы иметь что-то вроде класса Settings или эквивалента, который позаботился бы о синтаксическом анализе аргументов таким образом, чтобы его можно было использовать для остальной части приложения.

David Thibault 10.05.2011 23:27

Первый способ лучше, потому что он проще.

Вы знаете, что такое getopt? На codeplex есть порт для C#: http://www.codeplex.com/getopt

Мне первый способ кажется более интуитивным, потому что именно так я делаю это с тех пор, как я работал над C / C++.

Если в вашей командной строке слишком много переключателей, обратите внимание на команду getopt, которую рекомендует Томас. Это очень полезно. Однако я не смотрел на порт C# того же самого.

С уважением,

кгр

Другие вопросы по теме