bchavez/Bogus · error · ArgumentException

Cannot parse arguments for {mm.Name}. Argument list: {string

Error message

Cannot parse arguments for {mm.Name}. Argument list: {string.Join(",", parameters)}

What it means

The fallback catch-all in Tokenizer.ConvertStringArgumentsToObjects (Tokenizer.cs:156) catches any conversion exception not already handled (i.e. not OverflowException, InvalidCastException, or FormatException) and rethrows as ArgumentException. The most common source is System.ArgumentException from Enum.Parse(type, value) when value is not a defined member of the enum: that ArgumentException is neither InvalidCast nor Format, so it slips past the filtered handlers into this generic one.

Source

Thrown at Source/Bogus/Tokenizer.cs:156

   private static object[] ConvertStringArgumentsToObjects(string[] parameters, MustashMethod mm)
   {
      try
      {
         return mm.Method.GetParameters()
                         .Zip(parameters, GetValueForParameter)
                         .ToArray();
      }
      catch (OverflowException ex)
      {
         throw new ArgumentOutOfRangeException($"One of the arguments for {mm.Name} is out of supported range. Argument list: {string.Join(",", parameters)}", ex);
      }
      catch (Exception ex) when (ex is InvalidCastException or FormatException)
      {
         throw new ArgumentException($"One of the arguments for {mm.Name} cannot be converted to target type. Argument list: {string.Join(",", parameters)}", ex);
      }
      catch (Exception ex)
      {
         throw new ArgumentException($"Cannot parse arguments for {mm.Name}. Argument list: {string.Join(",", parameters)}", ex);
      }
   }

   private static object GetValueForParameter(ParameterInfo parameterInfo, string parameterValue)
   {
      var type = Nullable.GetUnderlyingType(parameterInfo.ParameterType) ?? parameterInfo.ParameterType;

      if( typeof(Enum).IsAssignableFrom(type)) return Enum.Parse(type, parameterValue);

      if( typeof(TimeSpan) == type ) return TimeSpan.Parse(parameterValue);

      return Convert.ChangeType(parameterValue, type);
   }

   private static string GetArgumentsString(string methodCall, int parametersStart)
   {
      var parametersEnd = methodCall.IndexOf(')');
      if( parametersEnd == -1 )

View on GitHub (pinned to 6ece18c5c2)

Solutions

  1. Use only currently-defined enum member names (case-sensitive) or their integral values as the argument.
  2. Inspect the inner exception (InnerException / its Message) to identify the rejected value and target type.
  3. If you control the input, validate enum names against Enum.GetNames(targetType) before templating.

Example fix

// before
faker.Parse("{{system.filetype(\"notreal\")}}");
// after
faker.Parse("{{system.filetype(\"jpeg\")}}"); // use a defined member
Defensive patterns

Strategy: validation

Validate before calling

// The generic catch is most often Enum.Parse rejecting an undefined member; pre-check enums.
static bool EnumArgOk(string value, Type targetType)
{
    var t = Nullable.GetUnderlyingType(targetType) ?? targetType;
    if (!typeof(Enum).IsAssignableFrom(t)) return true;
    return Enum.IsDefined(t, value) || (int.TryParse(value, out var n) && Enum.IsDefined(t, n));
}

Try / catch

try { var s = faker.Parse(tpl); }
catch (ArgumentException ex) when (ex.Message.Contains("Cannot parse arguments"))
{
    // Inspect ex.InnerException: for enum params it is the ArgumentException from Enum.Parse.
    throw new InvalidOperationException($"Argument parsing failed (often an undefined enum member) in template: {tpl}", ex);
}

Prevention

When it happens

Trigger: Passing an UNDEFINED enum member name to an enum-typed parameter, e.g. {{system.filetype("notreal")}} where 'notreal' is not a defined member: Enum.Parse throws ArgumentException, rewrapped here. Any other exotic converter exception also lands here.

Common situations: Guessing enum member names from strings; version skew where an enum member was renamed or removed between Bogus versions; data files referencing an enum value that no longer exists; typos in case-sensitive enum names.

Related errors


AI-assisted analysis of bchavez/Bogus@6ece18c5c2 (2026-08-13). Data as JSON: /api/errors/3aabd7bc3afd3356. Report an issue: GitHub.