public static void Main(string[] args) { var rootCommand = new RootCommand { new Option("--list", "List all audio devices"), new Option <string>("--set", "Set device"), new Option <string>("--set-comm", "Set communication device") }; rootCommand.Description = "AudioDeviceSelector"; // Note that the parameters of the handler method are matched according to the names of the options rootCommand.Handler = CommandHandler.Create <string, string>( (set, setComm) => { var controller = new CoreAudioController(); var devices = controller.GetDevices(); if (args.Count() < 1) { Console.WriteLine($"{Assembly.GetExecutingAssembly().GetName().Name}.exe --help"); } if (args.Any(x => x.ToString().ToLower() == "--list")) { devices .OrderBy(d => d.DeviceType) .ToList() .ForEach(d => Console.WriteLine($"DeviceType: {d.DeviceType}, Id: {d.Id}, InterfaceName: {d.InterfaceName}, Name: {d.Name}")); } _ = set != null && controller.SetDeviceByName(set); _ = setComm != null && controller.SetCommDeviceByName(setComm); }); rootCommand.Invoke(args); }