C# command line arguments
last modified July 5, 2023
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.
C# cmd args in Main
In the first example, we pass command line arguments to a Main
method.
class Program { static void Main(string[] args) { foreach (var arg in args) { Console.WriteLine(arg); } } }
In the program, we simply print all arguments to the console.
static void Main(string[] args)
Command line arguments have the string[]
type. It is a convention
to name the variable args
.
$ dotnet run John Doe gardener John Doe gardener
C# cmd args without Main
In case there is no Main
method, the arguments are accessible via
the args
built-in variable.
Console.WriteLine($"You have passed {args.Length} arguments"); foreach (var arg in args) { Console.WriteLine(arg); }
The program prints the number of command line arguments and prints them to the terminal.
$ dotnet run 1 2 3 4 5 6 You have passed 6 arguments 1 2 3 4 5 6
C# Environment.GetCommandLineArgs
The Environment.GetCommandLineArgs
returns a string array
containing the command-line arguments for the current process.
string[] cargs = Environment.GetCommandLineArgs(); Console.WriteLine($"You have passed {cargs.Length} arguments"); foreach (var arg in cargs) { Console.WriteLine(arg); }
It is more explicit than the default built-in args
variable. Also,
Environment.GetCommandLineArgs
counts the program name as one of
the arguments.
$ dotnet run 1 2 3 4 5 You have passed 6 arguments /home/jano/Documents/prog/csharp/cmd-args/SimpleEx/bin/Debug/net6.0/SimpleEx.dll 1 2 3 4 5
C# Environment.CommanLine
The Environment.CommanLine
returns a string containing command-line
arguments.
string cargs = Environment.CommandLine; Console.WriteLine(cargs); string[] vals = cargs.Split(" "); try { int sum = vals.Skip(1).Select(e => Convert.ToInt32(e)).Sum(); Console.WriteLine($"The sum of values is {sum}"); return 0; } catch (FormatException e) { Console.WriteLine("Invalid input"); Console.WriteLine(e.Message); return 1; }
The program expects a list of integers as input.
string cargs = Environment.CommandLine;
We get the command line input with Environment.CommandLine
.
string[] vals = cargs.Split(" ");
We split the string into parts.
int sum = vals.Skip(1).Select(e => Convert.ToInt32(e)).Sum();
We skip the first argument, which is the program name. We convert the strings into integers and compute a sum.
catch (FormatException e) {
Parsing command line arguments is error-prone. We can get
FormatExceptions
.
C# CommandLineParser
The Command Line Parser Library offers a clean and concise API for manipulating command line arguments.
$ dotnet add package CommandLineParser
We add the CommandLineParser
package.
namespace CommandLineArgs; using CommandLine; class Options { [Option("vals")] public IEnumerable<int>? Vals { get; set; } } class Program { static void Main(string[] args) { Parser.Default.ParseArguments<Options>(args).WithParsed<Options>(o => { if (o.Vals != null) { int sum = o.Vals.Sum(); Console.WriteLine($"The sum is {sum}"); } else { Console.WriteLine("No arguments"); } }); } }
The program defines a --vals
option which accepts a sequence of
integers.
$ dotnet run --vals 1 2 3 4 5 6 The sum is 21
Source
Main and command-line arguments
In this article we have worked with command line arguments in C#.
Author
List all C# tutorials.