What is "string[] args" in Main class for?
The Main method would be passed an array that contained three strings: «Arg1», «Arg2», «Arg3».
If you need to pass an argument that contains a space then wrap it in quotes. For example:
Command line arguments commonly get used when you need to pass information to your application at runtime. For example if you were writing a program that copies a file from one location to another you would probably pass the two locations as command line arguments. For example:
C#. Метод main(). Способы объявления
Метод Main() . Способы объявления. Передача аргументов в функцию Main() . Метод GetCommandLineArgs() класса Environment
Содержание
- 1. Назначение метода Main() . Особенности применения
- 2. Способы объявления функции Main()
- 3. Модификаторы доступа, которые могут применяться с функцией Main()
- 4. Зачем в качестве параметров в функцию Main() передается массив строк?
- 5. Пример, который демонстрирует применение параметров в функции Main()
- 6. Установка параметров, которые передаются в функцию Main() , средствами Microsoft Visual Studio 2019
- 7. Каким образом в функцию Main() передать строку, которая содержит пробелы?
- 8. Получение параметров с помощью метода GetCommandLineArgs() класса Environment . Пример
- 9. Определение полного имени файла выполняемой программы
Поиск на других ресурсах:
1. Назначение метода Main() . Особенности применения
Функция Main() – это специальная функция, которая предназначена для начала выполнения любой программы и имеет следующие особенности применения:
- функция Main() есть точкой входа в любую программу на языке C#. Термин «точка входа» означает, что выполнение программы начинается из функции Main() ;
- функция Main() считается главной функцией в программе, которая может вызывать другие функции, реализованные в программе;
- функция Main() может получать параметры. С помощью этих параметров другая программа может передавать некоторую информацию (данные) в текущую программу;
- функция Main() может возвращать целочисленное значение, которое будет сигнализировать о результате выполнения программы. Это необходимо в случаях, если программа вызывается из другой программы (процесса). Чаще всего процессом, который вызывает функцию Main() есть операционная система;
- в программе функция с именем Main() может быть только одна. Иными словами, функция Main() не может быть перегружена;
- функция Main() есть статической, то есть в начале объявления содержит модификатор static . Это означает, что функция вызывается без создания экземпляра класса. Статичность функции необходима, так как при первом запуске еще не создано никаких экземпляров классов. Существуют только статические методы и переменные. Эти методы и переменные инициализируются автоматически при первом обращении к ним.
2. Способы объявления функции Main()
Функция Main() может быть объявлена одним из четырех возможных способов, перечисленных ниже.
Способ 1. Функция не возвращает значения и не получает параметров. Общая форма функции Main() в этом случае следующая:
Способ 2. Функция возвращает целочисленное значение и не получает параметров. В этом случае общая форма функции следующая
Здесь value – некоторое целочисленное значение, которое есть результатом возврата из программы. Другие процессы, запускающие текущую программу, могут использовать этот результат. Например, если функция Main() возвращает -1, то это может означать внутреннюю ошибку. И, наоборот, если функция возвращает 0, то это может означать корректное выполнение программы.
Способ 3. Функция не возвращает значения, но получает параметры. Параметрами функции Main() может быть массив строк. В этом случае общая форма функции следующая:
- args – массив строк, который передается в функцию Main() из других процессов.
Способ 4. Функция возвращает целочисленное значение и получает параметры. Общая форма объявления функции следующая
- args – массив строк, который передается в функцию Main() из других процессов;
- value – значение типа int , которое передается в процесс, который вызвал текущую программу.
3. Модификаторы доступа, которые могут применяться с функцией Main()
Функция Main() может быть объявлена с двумя модификаторами доступа:
- private – в этом случае функция Main() не может вызываться из других сборок непосредственно;
- public – функция Main() есть общедоступной из других сборок.
4. Зачем в качестве параметров в функцию Main() передается массив строк?
В качестве параметров в любую программу (функцию Main() ) вызывающий процесс (операционная система) может передать только строку символов. Если эта строка содержит слова, которые разделены символом пробел, то эта строка разбивается на массив строк.
Например. Пусть сделан вызов программы с именем Project1.exe следующим образом:
то функция Main() программы Project1.exe получит следующий массив входных параметров
то есть, для следующего объявления функции
значения переменной args будут следующими:
5. Пример, который демонстрирует применение параметров в функции Main()
В примере продемонстрирован вывод массива параметров на экран. Программа создана по шаблону Console Application.
Результат выполнения программы ConsoleApp1.exe для строки
имеет следующий вид
6. Установка параметров, которые передаются в функцию Main() , средствами Microsoft Visual Studio 2019
В системе Microsoft Visual Studio любой версии можно задавать параметры, которые передаются в функцию Main() . Эти параметры еще называются аргументы командной строки.
Чтобы задать аргументы командной строки используется команда Properties… из меню Project .
Например, если создано консольное приложение с именем решения ConsoleApp1 , то вызвать окно настройки параметров можно с помощью команды
как показано на рисунке 1.
Рисунок 1. Команда вызова свойств проекта
В результате откроется окно «ConsoleApp1» , в котором нужно активировать элемент Debug (рисунок 2). В левой части окна в поле «Application arguments» нужно ввести аргументы командной строки. Эти аргументы будут передаваться в функцию Main() . Таким образом, можно протестировать вызов текущей программы из других процессов передавая программе различные варианты аргументов.

Рисунок 2. Установка аргументов командной строки
7. Каким образом в функцию Main() передать строку, которая содержит пробелы?
Бывают случаи, когда в функцию Main() нужно передать строку как один параметр. Но эта строка может содержать пробелы. В этом случае строку нужно заключить в двойные кавычки. Все что размещается между двойными кавычками не разбивается по параметрам.
Например. Пусть в функцию Main() для приложения с именем ConsoleApp1.exe нужно передать два параметра-строки:
- «This is a parameter»;
- «Second parameter».
В этом случае, вызов ConsoleApp1.exe из другого процесса (например, из командной строки) будет следующим:
В этом случае в функцию Main() будут переданы следующие значения массива args :
8. Получение параметров с помощью метода GetCommandLineArgs() класса Environment . Пример
Получить параметры командной строки можно с помощью метода GetCommandLineArgs() класса Environment . Этот метод есть статическим, а потому не нужно создавать экземпляр класса Environment . Метод возвращает массив аргументов типа string[] .
Важно помнить, что метод GetCommandLineArgs() возвращает массив параметров на один больше. Первым параметром, который возвращает метод (под индексом 0) идет полное имя к текущему выполняемому файлу.
Пример. Вывод на экран списка параметров, передаваемых в функцию Main() .
9. Определение полного имени файла выполняемой программы
Полное имя файла выполняемой программы можно определить с помощью статического метода GetCommandLineArgs() класса Environment. Как известно, метод используется для определения параметров текущей программы в виде массива строк типа string[] . При вызове метода, параметр, который возвращается, с индексом 0 содержит полное имя файла текущей программы.
Нижеследующий фрагмент кода демонстрирует вывод полного имени файла текущей программы
C# command line arguments
In this article we show how to work with command line arguments in C#.
Command line arguments are values passed to console programs usually through the terminal.
We can send command line arguments to a Main method by declaring a parameter with the string[] type. Programs that use top-level statements have a default built-in args variable, which contains the arguments.
Advertisements C# cmd args in Main
In the first example, we pass command line arguments to a Main method.
In the program, we simply print all arguments to the console.
Command line arguments have the string[] type. It is a convention to name the variable args .
C# cmd args without Main
In case there is no Main method, the arguments are accessible via the args built-in variable.
The program prints the number of command line arguments and prints them to the terminal.
Advertisements C# Environment.GetCommandLineArgs
The Environment.GetCommandLineArgs returns a string array containing the command-line arguments for the current process.
It is more explicit than the default built-in args variable. Also, Environment.GetCommandLineArgs counts the program name as one of the arguments.
C# Environment.CommanLine
The Environment.CommanLine returns a string containing command-line arguments.
The program expects a list of integers as input.
We get the command line input with Environment.CommandLine .
We split the string into parts.
We skip the first argument, which is the program name. We convert the strings into integers and compute a sum.
Parsing command line arguments is error-prone. We can get FormatExceptions .
Advertisements C# CommandLineParser
The Command Line Parser Library offers a clean and concise API for manipulating command line arguments.
We add the CommandLineParser package.
The program defines a —vals option which accepts a sequence of integers.
Передача параметров в консольное приложение
Одним из способов конфигурации консольного приложения является передача параметров приложения через командную строку. В зависимости от полученных параметров, наше приложение может действовать соответствующим образом, например, проводить предварительные вычисления или же загружать данные из файла, путь к которому был передан в параметрах.
Создание и настройка консольного приложения
Для начала, создадим новое консольное приложение, с которым будем в дальнейшем работать. Запустим Visual Studio (у меня это Visual Studio 2022) и создадим новый проект «Консольное приложение Microsoft»:

Консольное приложение C#
Чтобы в дальнейшем наша работ была единообразна, на третьем шаге создания нового проекта обязательно установите флажок напротив опции «Не использовать операторы верхнего уровня»:

Не использовать операторы верхнего уровня
После того, как вы нажмете кнопку «Создать» должен создаться новый проект с привычным для нас содержимым — классом Program и одним методом — Main :
Так как мы будем в дальнейшем экспериментировать с параметрами нашего приложения, то лучше, чтобы наш проект собирался в папке к которой мы сможем достаточно быстро получить доступ из командной строки, например, в папке «C:\Projects». Для этого кликаем правой кнопкой мыши на названии проекта в обозревателе решений и выбираем в контекстном меню пункт «Свойства»

Свойства проекта
В открывшемся окне переходим в раздел «Сборка -> Выходные данные» и указываем путь в строке «Базовый путь для выходных данных»:

Базовый путь для выходных данных
Теперь собранный проект будет размещаться в папке «C:\Projects\Debug\net7.0\» (если у Вас, как и у меня установлена Visual Studio 2022 и .NET 7). Теперь посмотрим немного более подробно на код нашего приложения.
Шаблон консольного приложения C# и метод Main
По умолчанию, новое консольное приложение содержит один класс ( Program ), в котором определен единственный статический метод Main :
При этом, название пространства имен в котором расположен класс Program , совпадает с названием нашего проекта. Что касается названия класса, то, по умолчанию — это Program , однако, если необходимо, то мы можем изменять его как угодно на свое усмотрение, например, назвать его MyProgram или как-то ещё. Что нельзя делать, так это изменять название метода Main или делать его не статическим.
Например, если вы попробуете переименовать метод Main во что-нибудь другое, например, MyMain , то при попытке запуска приложения гарантированно получите ошибку следующего вида:
При этом, Вы можете использовать различные сигнатуры метода Main . Допускаются следующие сигнатуры Main :
Например, если я захочу, чтобы в момем методе Main выполнялись какие-то асинхронные задачи, то я могу изменить шаблон своего консольного приложения следующим образом:
на работоспособность приложения такое изменение никак не повлияет так как я использовал допустимую сигнатуру метода Main . По умолчанию, метод Main объявлен с параметром string[] , который содержит аргументы командной строки.
Передача параметров в консольное приложение через аргументы командной строки
Допустим, мы хотим, чтобы наше приложение вместо безликого «Hello, World!» здоровалось с нами в зависимости то того, какое имя будет передано приложение через командную строку. Перепишем наше приложение следующим образом:
Теперь, если приложение запустится без параметров, то появится стандартная фраза «Hello, World!», иначе — программа будет «здороваться» с каждым, чьё имя будет передано в параметрах.
Соберем наше приложение и проведем тестирование непосредственно из командной строки. Мы договорились, что собираться приложение будет в папке «C:/Projects».
Запускам командную строку (cmd) и выполняем следующие команды:
Здесь первой командой cd мы переходим в папку приложения. Второй командой мы запускаем приложение и передаем ему параметры. Здесь ИмяПроекта — название вашего проекта, ИмяПользователя1 , ИмяПользователя2 — имена пользователей. Например, у меня получился такой вызов:

Запуск приложения из командной строки
В результате, мы увидим в консоли следующее:
Отладка консольного приложения с параметрами
Каждый раз запускать командную строку Windows для отладки консольного приложения, использующего параметры не удобно. Для того, чтобы запустить приложение в режиме отладки сразу с параметрами можно сделать следующее:
- Заходим в свойства проекта
- Переходим на пункт «Отладка» и жмем на ссылку «Открыть пользовательский интерфейс профилей запуска отладки»
3. В открывшемся окне в поле «Аргументы командной строки» записываем необходимые нам для откладки параметры через пробел:

Аргументы командной строки
Теперь можете запустить приложение в режиме отладки и убедиться, что приложение запущено с заданными параметрами:

Откладка приложения с параметрами
Определение параметров с пробелами
Параметры (аргументы командной строки) разделяются пробелами. Уже в приложении строка с пробелами разделяется на массив строк. Однако, что делать, если нам необходимо передать значение параметра, которое уже само по себе содержит пробелы? Для этого достаточно заключить такой параметр в двойные кавычки, например:
В этом случае строка будет интерпретирована как один параметр.
Получение параметров приложения вне метода Main
Если ваше приложение достаточно большое, то, вполне возможно, что Вам потребуется получить аргументы командной строки где-то за пределами метода Main . Сделать это возможно, используя класс Environment . У этого класса определен статический метод GetCommandLineArgs() , который возвращает аргументы командной строки. При этом стоит учесть следующий момент:
Например, вот такой вызов:
приведет к следующему выводу в консоли:
Вторая строка в консоли — это параметр, который мы определили для приложения в предыдущем примере.
Итого
Параметры для консольного приложения могут передаваться через командную строку. Параметры отделяются друг от друга пробелами. Если необходимо передать параметр, содержащий пробелы, то он должен быть заключен в двойные кавычки. Если необходимо получить параметры приложение за пределами метода Main, то можно воспользоваться статическим классом Environment .