/// <summary> /// Get the program options from the user's input /// </summary> /// <param name="args"></param> /// <returns></returns> public static InputParams ParseCommandLineParams(string[] args) { try { InputParams programInput = new InputParams(); //setting the default values programInput.LogLevel = LogLevel.Information; programInput.FilePath = string.Empty; programInput.FactFilePath = string.Empty; programInput.OutputFolder = string.Empty; if (args.Length == 0) { return(null); } PropertyInfo propertyInfo = null; foreach (var argument in args) { if (string.IsNullOrEmpty(argument?.Trim())) { break; } switch (argument.ToUpper().Trim()) { case "-FILEPATH": propertyInfo = (programInput.GetType()).GetProperty("FilePath"); break; case "-FACTFILEPATH": propertyInfo = (programInput.GetType()).GetProperty("FactFilePath"); break; case "-OUTPUTDIR": propertyInfo = (programInput.GetType()).GetProperty("OutputFolder"); break; case "-LOGLEVEL": propertyInfo = (programInput.GetType()).GetProperty("LogLevel"); break; case "--HELP": case "-H": case "/?": DisplayHelp(); break; default: if (propertyInfo != null) { if (propertyInfo.Name == "FilePath" || propertyInfo.Name == "FactFilePath" || propertyInfo.Name == "OutputFolder") { propertyInfo.SetValue(programInput, argument); propertyInfo = null; } else if (propertyInfo.Name == "LogLevel") { if (Enum.TryParse(typeof(LogLevel), argument, true, out var logLevel)) { propertyInfo.SetValue(programInput, logLevel); propertyInfo = null; } } } break; } } bool filePathExists = ValidateInputPath(programInput.FilePath, "File"); bool fileFactPathExists = ValidateInputPath(programInput.FactFilePath, "File"); bool outputFolder = ValidateInputPath(programInput.OutputFolder, "Folder"); if (!filePathExists || !fileFactPathExists || !outputFolder) { Environment.Exit(0); } return(programInput); } catch (Exception) { throw; } }