{"record":{"id":"dfe547e330cb761e","repo":"babalae/better-genshin-impact","slug":"paddle-ocr","errorCode":null,"errorMessage":"不支持的 Paddle OCR 模型配置","messagePattern":"不支持的 Paddle OCR 模型配置","errorType":"exception","errorClass":"ArgumentOutOfRangeException","httpStatus":null,"severity":"error","filePath":"BetterGenshinImpact/Core/Recognition/OCR/OcrFactory.cs","lineNumber":121,"sourceCode":"            PaddleOcrModelConfig.V6 =>\n                new PaddleOcrService(App.ServiceProvider.GetRequiredService<BgiOnnxFactory>(),\n                    PaddleOcrService.PaddleOcrModelType.V6),\n            PaddleOcrModelConfig.V4 =>\n                new PaddleOcrService(App.ServiceProvider.GetRequiredService<BgiOnnxFactory>(),\n                    PaddleOcrService.PaddleOcrModelType.V4),\n            PaddleOcrModelConfig.V4En =>\n                new PaddleOcrService(App.ServiceProvider.GetRequiredService<BgiOnnxFactory>(),\n                    PaddleOcrService.PaddleOcrModelType.V4En),\n            PaddleOcrModelConfig.V5Korean =>\n                new PaddleOcrService(App.ServiceProvider.GetRequiredService<BgiOnnxFactory>(),\n                    PaddleOcrService.PaddleOcrModelType.V5Korean),\n            PaddleOcrModelConfig.V5Latin =>\n                new PaddleOcrService(App.ServiceProvider.GetRequiredService<BgiOnnxFactory>(),\n                    PaddleOcrService.PaddleOcrModelType.V5Latin),\n            PaddleOcrModelConfig.V5Eslav =>\n                new PaddleOcrService(App.ServiceProvider.GetRequiredService<BgiOnnxFactory>(),\n                    PaddleOcrService.PaddleOcrModelType.V5Eslav),\n            _ => throw new ArgumentOutOfRangeException(nameof(_config.PaddleOcrModelConfig),\n                _config.PaddleOcrModelConfig, \"不支持的 Paddle OCR 模型配置\")\n        };\n    }\n\n    public Task Unload()\n    {\n        if (_paddleOcrService is not IDisposable disposable)\n        {\n            _paddleOcrService = null;\n            return Task.CompletedTask;\n        }\n        try\n        {\n            disposable.Dispose();\n            _paddleOcrService = null;\n        }\n        catch (Exception ex)\n        {","sourceCodeStart":103,"sourceCodeEnd":139,"githubUrl":"https://github.com/babalae/better-genshin-impact/blob/a7cb36712dcb409be610257d877fcea3597e9d6b/BetterGenshinImpact/Core/Recognition/OCR/OcrFactory.cs#L103-L139","documentation":"CreatePaddleOcrInstance switches on _config.PaddleOcrModelConfig; the default arm throws ArgumentOutOfRangeException if the value is not one of the known model configs (V4Auto, V5Auto, V5, V6, V4, V4En, V5Korean, V5Latin, V5Eslav). This protects against a config value that has no corresponding model assets.","triggerScenarios":"A PaddleOcrModelConfig enum value added without a case; default(PaddleOcrModelConfig) when 0 isn't a valid member; a settings file with a stale/renamed model identifier.","commonSituations":"Config schema migration that introduced a new enum member not yet handled; hand-edited config with a typo; deserialized settings from an older version.","solutions":["Set PaddleOcrModelConfig to a supported value (e.g. V5Auto).","Validate the enum at config load and fall back to a known model.","Keep the switch exhaustive when adding new model configs."],"exampleFix":"// before\n// config.PaddleOcrModelConfig = someUnknownValue\nvar svc = factory.PaddleOcr;\n\n// after\nif (!Enum.IsDefined(_config.PaddleOcrModelConfig))\n    _config.PaddleOcrModelConfig = PaddleOcrModelConfig.V5Auto;\nvar svc = factory.PaddleOcr;","handlingStrategy":"validation","validationCode":"if (!Enum.IsDefined(_config.PaddleOcrModelConfig) ||\n    !_knownModels.Contains(_config.PaddleOcrModelConfig))\n    _config.PaddleOcrModelConfig = PaddleOcrModelConfig.V5Auto;\nvar svc = factory.PaddleOcr;","typeGuard":"static readonly HashSet<PaddleOcrModelConfig> _knownModels = new()\n{\n    PaddleOcrModelConfig.V4Auto, PaddleOcrModelConfig.V5Auto, PaddleOcrModelConfig.V5,\n    PaddleOcrModelConfig.V6, PaddleOcrModelConfig.V4, PaddleOcrModelConfig.V4En,\n    PaddleOcrModelConfig.V5Korean, PaddleOcrModelConfig.V5Latin, PaddleOcrModelConfig.V5Eslav\n};","tryCatchPattern":null,"preventionTips":["Set PaddleOcrModelConfig to a supported value in defaults.","Validate the enum at config load and fall back to V5Auto.","Keep the switch exhaustive when adding model configs."],"tags":["ocr","paddleocr","factory","enum","config","argument-validation"],"backgroundTag":null,"analyzedSha":"a7cb36712dcb409be610257d877fcea3597e9d6b","analyzedAt":"2026-08-13T16:44:57.548Z","schemaVersion":2},"datasetVersion":"2026-08-13T19:17:28.613Z"}