{"record":{"id":"457bb515555e3ad7","repo":"babalae/better-genshin-impact","slug":"rawcategory","errorCode":null,"errorMessage":"未知的角色信息分类：{rawCategory}","messagePattern":"未知的角色信息分类：(.+?)","errorType":"validation","errorClass":"ArgumentException","httpStatus":null,"severity":"error","filePath":"BetterGenshinImpact/GameTask/CharacterDevelopment/CharacterDevelopmentTask.cs","lineNumber":181,"sourceCode":"        {\n            return CharacterDevelopmentCategory.All;\n        }\n\n        if (string.IsNullOrWhiteSpace(categories))\n        {\n            throw new ArgumentException(\"读取分类不能为空字符串。\", nameof(categories));\n        }\n\n        CharacterDevelopmentCategory result = CharacterDevelopmentCategory.None;\n        foreach (var rawCategory in categories.Split(';', StringSplitOptions.None))\n        {\n            var category = rawCategory.Trim();\n            result |= category switch\n            {\n                \"属性\" => CharacterDevelopmentCategory.Attribute,\n                \"武器\" => CharacterDevelopmentCategory.Weapon,\n                \"天赋\" => CharacterDevelopmentCategory.Talent,\n                _ => throw new ArgumentException($\"未知的角色信息分类：{rawCategory}\", nameof(categories))\n            };\n        }\n\n        return result;\n    }\n}\n\ninternal enum CharacterDevelopmentState\n{\n    Unknown,\n    MainUi,\n    OpenCharacterList,\n    OpenFilterPanel,\n    FilterPanel,\n    SelectElementFilter,\n    SelectWeaponFilter,\n    ConfirmFilterPanel,\n    FindAndClickAvatar,","sourceCodeStart":163,"sourceCodeEnd":199,"githubUrl":"https://github.com/babalae/better-genshin-impact/blob/a7cb36712dcb409be610257d877fcea3597e9d6b/BetterGenshinImpact/GameTask/CharacterDevelopment/CharacterDevelopmentTask.cs#L163-L199","documentation":"Thrown by ParseCategories when splitting the categories string by ';' yields a token that doesn't match any known category. Valid categories are '属性' (Attribute), '武器' (Weapon), '天赋' (Talent). Any other token (including typos or English names) triggers this ArgumentException.","triggerScenarios":"Called from ParseCategories. categories.Split(';') produces a token that, after trimming, doesn't match '属性', '武器', or '天赋' in the switch expression default arm.","commonSituations":"Typo in category name (e.g. '属' instead of '属性'); using English names (e.g. 'Talent') instead of Chinese; extra semicolons producing empty tokens that should have been filtered; game version added new categories not yet supported.","solutions":["Use only valid category names: '属性', '武器', '天赋' (semicolon-separated).","Check for typos or encoding issues in the category string.","Remove extra semicolons or empty tokens from the input.","Pass null for all categories if unsure."],"exampleFix":"// before (wrong)\nawait dev.GetMultiCharacters(['钟离'], '属性;Talent');\n// after\nawait dev.GetMultiCharacters(['钟离'], '属性;天赋');","handlingStrategy":"validation","validationCode":"// Validate category tokens before calling\nvar validCategories = new HashSet<string> { \"属性\", \"武器\", \"天赋\" };\nif (categories != null)\n{\n    foreach (var token in categories.Split(';'))\n    {\n        if (!validCategories.Contains(token.Trim()))\n        {\n            throw new ArgumentException($\"Invalid category: {token}. Valid: 属性, 武器, 天赋\");\n        }\n    }\n}","typeGuard":"static bool IsValidCategoryString(string? categories)\n{\n    if (categories == null) return true;\n    if (string.IsNullOrWhiteSpace(categories)) return false;\n    var valid = new HashSet<string> { \"属性\", \"武器\", \"天赋\" };\n    return categories.Split(';').All(t => valid.Contains(t.Trim()));\n}","tryCatchPattern":"try\n{\n    await dev.GetMultiCharacters(names, categories);\n}\ncatch (ArgumentException ex) when (ex.Message.Contains(\"未知的角色信息分类\"))\n{\n    // Use only valid categories: 属性, 武器, 天赋\n}","preventionTips":["Use only valid category names: '属性', '武器', '天赋'.","Avoid typos and English equivalents.","Remove extra semicolons or empty tokens from the string.","Pass null for all categories if unsure."],"tags":["character-development","argument-validation","categories","unknown-value"],"backgroundTag":null,"analyzedSha":"a7cb36712dcb409be610257d877fcea3597e9d6b","analyzedAt":"2026-08-13T16:44:57.548Z","schemaVersion":2},"datasetVersion":"2026-08-13T19:17:28.613Z"}