public static Dictionary <string, string> ToDictionary(this ICommandLineOption command, string prefix = "cmd_") { string GetKey(string key) { return($"{prefix}{key}"); } var c = command.GetType() .GetProperties(BindingFlags.Instance | BindingFlags.Public) .ToDictionary(prop => GetKey(prop.Name.ToLowerInvariant()), prop => prop.GetValue(command, null)?.ToString()); if (command is IVariableInteractivityCommand interactivityCommand) { c[GetKey("interactivity")] = GetInteractivityLevel(interactivityCommand).ToString().ToLowerInvariant(); c.Remove(GetKey("interactive")); c.Remove(GetKey("passive")); c.Remove(GetKey("silent")); } return(c); }