fclp / fluent-command-line-parser

A simple, strongly typed .NET C# command line parser library using a fluent easy to use interface
Other
530 stars 86 forks source link

Best way to quit when help is requested #55

Closed MuiBienCarlota closed 6 years ago

MuiBienCarlota commented 8 years ago

I'm using generic FluentCommandLineParser like this:

public class Arguments
{
    public string InputFile { get; set; };

    public static Arguments Parse(string[] args)
    {
        var p = new FluentCommandLineParser<Arguments>();
        p.SetupHelp("h", "help", "?").Callback(s => Console.WriteLine(s));
        p.Setup(job => job.InputFile).As('i', "inputFile").WithDescription("Input file");
        var result = p.Parse(args);
        return p?.Object;
    }
}
private static void Main(string[] args)
{
    var arguments = Arguments.Parse(args);
    // If help 
    ...

And i'd need to quit if help was requested.

I know I can add a property bool HelpNeeded in my Arguments class and assign it either in SetupHelp Callback or using result.HelpCalled. But I think I can miss something.

Do you have a better option?

siywilliams commented 8 years ago

Hi @MuiBienCarlota

No better way as such but I would do it using the following...

public class Arguments
{
    public string InputFile { get; set; };
    public string HelpCalled { get; set; };

    public static Arguments Parse(string[] args)
    {
        var p = new FluentCommandLineParser<Arguments>();
        p.SetupHelp("h", "help", "?").Callback(s => Console.WriteLine(s));
        p.Setup(job => job.InputFile).As('i', "inputFile").WithDescription("Input file");
        var result = p.Parse(args);
        HelpCalled = result.HelpCalled; // assign property from result
        return p?.Object;
    }
}
private static void Main(string[] args)
{
    var arguments = Arguments.Parse(args);
    // If help 
    if(arguments.HelpCalled) {
       ...
    }