{"record":{"id":"5adcaced7916730b","repo":"bchavez/Bogus","slug":"there-are-no-values-after-exclusion-to-choose-from","errorCode":null,"errorMessage":"There are no values after exclusion to choose from.","messagePattern":"There are no values after exclusion to choose from\\.","errorType":"exception","errorClass":"ArgumentException","httpStatus":null,"severity":"error","filePath":"Source/Bogus/Randomizer.cs","lineNumber":671,"sourceCode":"   /// <typeparam name=\"T\">Must be an Enum</typeparam>\n   /// <param name=\"exclude\">Exclude enum values from being returned</param>\n   public T Enum<T>(params T[] exclude) where T : struct, Enum\n   {\n      var e = typeof(T);\n      if( !e.IsEnum() )\n         throw new ArgumentException(\"When calling Enum<T>() with no parameters T must be an enum.\");\n\n      var selection = System.Enum.GetNames(e);\n\n      if( exclude.Any() )\n      {\n         var excluded = exclude.Select(ex => System.Enum.GetName(e, ex));\n         selection = selection.Except(excluded).ToArray();\n      }\n\n      if( !selection.Any() )\n      {\n         throw new ArgumentException(\"There are no values after exclusion to choose from.\");\n      }\n\n      var val = this.ArrayElement(selection);\n\n      System.Enum.TryParse(val, out T picked);\n      return picked;\n   }\n\n   /// <summary>\n   /// Picks a random subset of enum values in T:Enum.\n   /// </summary>\n   /// <typeparam name=\"T\">The enum.</typeparam>\n   /// <param name=\"count\">The number of enums to pick.</param>\n   /// <param name=\"exclude\">Any enums that should be excluded before picking.</param>\n   public T[] EnumValues<T>(int? count = null, params T[] exclude) where T : Enum\n   {\n      T[] enums;\n      if( exclude.Length > 0)","sourceCodeStart":653,"sourceCodeEnd":689,"githubUrl":"https://github.com/bchavez/Bogus/blob/6ece18c5c22648ab4606e45a0aaf2f07fc5259e4/Source/Bogus/Randomizer.cs#L653-L689","documentation":"Thrown by Randomizer.Enum<T> when, after applying the exclude list, no enum names remain in the selection. The method computes selection = Enum.GetNames(T).Except(exclude) and rejects an empty result because there is nothing to pick.","triggerScenarios":"Calling f.Random.Enum(exclude: everyValue) i.e. excluding all members of the enum, or excluding the sole member of a single-value enum.","commonSituations":"Building exclude lists dynamically and accidentally covering the whole enum; enums with one value where the caller excludes it.","solutions":["Ensure at least one enum member is not in the exclude list.","Validate before calling: var remaining = Enum.GetValues<T>().Except(exclude); require remaining.Any().","Reconsider the exclude set if it matches all members."],"exampleFix":"// before\nvar v = f.Random.Enum(Enum.GetValues<MyEnum>().ToArray());\n// after\nvar pool = Enum.GetValues<MyEnum>().Except(new[]{MyEnum.None}).ToArray();\nvar v = pool.Length > 0 ? f.Random.Enum(pool) : MyEnum.None;","handlingStrategy":"validation","validationCode":"static T SafeEnum<T>(Bogus.Randomizer r, params T[] exclude) where T : struct, Enum {\n    var remaining = System.Enum.GetValues<T>().Except(exclude).ToArray();\n    if (remaining.Length == 0) throw new InvalidOperationException(\"all enum values excluded\");\n    return r.Enum(exclude);\n}","typeGuard":"bool HasRemaining<T>(params T[] exclude) where T : struct, Enum => System.Enum.GetValues<T>().Except(exclude).Any();","tryCatchPattern":"try { return r.Enum(exclude); }\ncatch (ArgumentException ex) when (ex.Message.Contains(\"no values after exclusion\")) {\n    return System.Enum.GetValues<T>()[0]; // default first member\n}","preventionTips":["Ensure exclude is a strict subset of enum members.","Validate remaining pool before calling.","Avoid excluding all members of small enums."],"tags":["bogus","randomizer","enum","exclusion"],"backgroundTag":null,"analyzedSha":"6ece18c5c22648ab4606e45a0aaf2f07fc5259e4","analyzedAt":"2026-08-13T21:08:15.463Z","schemaVersion":2},"datasetVersion":"2026-08-14T00:17:13.853Z"}