Jump to content
  • Advertisement
Sign in to follow this  
  • entries
  • comments
  • views

A reusable, reflection based command-line parser

Sign in to follow this  


I often find myself writing little throwaway utilities to help with other tasks, and many of these utilities need to parse command lines. There are myriad ways to do this in C#, ranging from the quick and dirty to the infinitely flexible and confusing. The middle ground approach shown here is not especially unique, but I have found it useful over the years, and thought I would post it here in case you do too.
Get it here.
Use it like so: public enum CatSpecies

public class Options
public int NumberOfCats = 23;
public CatSpecies Species = CatSpecies.Siamese;
public bool ChaseTheCats;
public bool PostToYouTube;

class Program
static int Main(string[] args)
var options = new Options();
var parser = new CommandLineParser(options);

if (!parser.ParseCommandLine(args))
return 1;


return 0;
You can run this program like so: MyProgram /NumberOfCats:10 /species:alley /posttoyoutube
It automatically generates usage help if you pass invalid values:[color="#008000"] > MyProgram /foo[/color]
[color="#000000"] Unknown option 'foo'

Usage: MyProgram

You can mark some options as required: public class Options
public int NumberOfCats;

public CatSpecies Species;

public bool ChaseTheCats;
public bool PostToYouTube;
Required options are specified without the /ParameterName: prefix: MyProgram 10 alley /posttoyoutube
Of course you will get an error if any required parameters are not specified.
The parser also supports list types, which allow a single parameter to be specified more than once (each entry will be appended to the list). For instance: public class Options
public readonly List Names = new List();

public readonly List Colors = new List();
This allows you to call: MyProgram shawn tracy rhys boo kess finch /color:red /color:white
Note that I was able to specify System.Drawing.Color values by string name (eg. "red"). This works because the parser uses TypeDescriptor/TypeConverter to convert string arguments into whatever types it finds in the Options object. If you have custom types, just write a matching TypeConverter and you'll be able to specify them directly as argument values.

Sign in to follow this  


Recommended Comments

There are no comments to display.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Advertisement

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!