With CommandDotNet, you can define a single Operand collection and many Option collections.
Let's enhance our rocket launcher to visit multiple planets and specify a crew.
public void LaunchRocket( IEnumerable<string> planets, [Option(ShortName = "c", LongName = "crew")] string crew)
Help looks like...
~ $ dotnet example.dll LaunchRocket -h Usage: dotnet example.dll LaunchRocket [options] [arguments] Arguments: planets (Multiple) <TEXT> Options: -c (Multiple) <TEXT>
And this is how you call it
dotnet example.dll LaunchRocket mars earth jupiter -c aaron -c alex
and since options are not positional, they can be intermixed with operands.
dotnet example.dll LaunchRocket mars -c aaron earth -c alex jupiter launching rocket planets: mars,earch,jupiter crew: aaron,alex
Only one collection is supported because it is not possible to determine which collection an operand belonged to if there were many.
Operand collections must the be the last operand specified.
Since options are named, you can have multiple option collections. Specify the option name for each entry as shown in the example above.
CommandDotNet provides middleware to pipe input to operand collections.
If your parameter type is
IEnumerable<T>, the operands will be streamed into the command.
See prompting for missing arguments to see how prompting for collections works.
Replace the default prompter to provide a different experience.