static IEnumerable <object?> Convert(IEnumerable <CustomAttributeTypedArgument> arguments) { foreach (var argument in arguments) { var value = argument.Value; // Collections are recursively IEnumerable<CustomAttributeTypedArgument> rather than // being the exact matching type, so the inner values must be converted. if (value is IEnumerable <CustomAttributeTypedArgument> valueAsEnumerable) { value = Convert(valueAsEnumerable).ToArray(); } else if (value != null && value.GetType() != argument.ArgumentType && argument.ArgumentType.IsEnum) { value = Enum.Parse(argument.ArgumentType, value.ToString() !); } if (value != null && value.GetType() != argument.ArgumentType && argument.ArgumentType.IsArray) { value = Reflector.ConvertArgument(value, argument.ArgumentType); } yield return(value); } }