{"record":{"id":"8323738d8faf8835","repo":"EllanJiang/GameFramework","slug":"setting-name-is-invalid","errorCode":null,"errorMessage":"Setting name is invalid.","messagePattern":"Setting name is invalid\\.","errorType":"exception","errorClass":"GameFrameworkException","httpStatus":null,"severity":"error","filePath":"GameFramework/Setting/SettingManager.cs","lineNumber":145,"sourceCode":"\n            m_SettingHelper.GetAllSettingNames(results);\n        }\n\n        /// <summary>\n        /// 检查是否存在指定游戏配置项。\n        /// </summary>\n        /// <param name=\"settingName\">要检查游戏配置项的名称。</param>\n        /// <returns>指定的游戏配置项是否存在。</returns>\n        public bool HasSetting(string settingName)\n        {\n            if (m_SettingHelper == null)\n            {\n                throw new GameFrameworkException(\"Setting helper is invalid.\");\n            }\n\n            if (string.IsNullOrEmpty(settingName))\n            {\n                throw new GameFrameworkException(\"Setting name is invalid.\");\n            }\n\n            return m_SettingHelper.HasSetting(settingName);\n        }\n\n        /// <summary>\n        /// 移除指定游戏配置项。\n        /// </summary>\n        /// <param name=\"settingName\">要移除游戏配置项的名称。</param>\n        /// <returns>是否移除指定游戏配置项成功。</returns>\n        public bool RemoveSetting(string settingName)\n        {\n            if (m_SettingHelper == null)\n            {\n                throw new GameFrameworkException(\"Setting helper is invalid.\");\n            }\n\n            if (string.IsNullOrEmpty(settingName))","sourceCodeStart":127,"sourceCodeEnd":163,"githubUrl":"https://github.com/EllanJiang/GameFramework/blob/d0c010b05167c58e92350449d04864a91ca13fd2/GameFramework/Setting/SettingManager.cs#L127-L163","documentation":"SettingManager.HasSetting throws 'Setting name is invalid.' when the settingName argument is null or an empty string, after the helper itself has passed the null check. The library requires a non-empty setting name to look up a configuration entry.","triggerScenarios":"Calling SettingManager.HasSetting(null) or HasSetting(\"\") — typically from a variable that was never assigned or an empty result of another lookup.","commonSituations":"A settings key constant deleted or misspelled so a variable defaults to null; string parsing (e.g. Split) returning an empty segment; deserialized config objects with missing key fields.","solutions":["Guard the name before calling: skip the lookup or substitute a default key when string.IsNullOrEmpty(settingName).","Fix the upstream source of the empty key (missing constant, empty split segment, bad deserialization).","Define setting names as constants or an enum-derived string map to avoid empty literals."],"exampleFix":"// before\nbool has = m_SettingManager.HasSetting(playerKey); // playerKey == \"\"\n// after\nif (!string.IsNullOrEmpty(playerKey))\n{\n    bool has = m_SettingManager.HasSetting(playerKey);\n}","handlingStrategy":"validation","validationCode":"if (string.IsNullOrEmpty(settingName)) return false; // or substitute a default key\nbool has = SettingManager.HasSetting(settingName);","typeGuard":"static bool IsValidSettingName(string name) => !string.IsNullOrEmpty(name);\n","tryCatchPattern":"try { has = m_SettingManager.HasSetting(name); }\ncatch (GameFrameworkException ex) when (ex.Message == \"Setting name is invalid.\")\n{\n    has = false; // treat invalid name as 'not present'\n}","preventionTips":["Define setting keys as constants instead of runtime-built strings.","Validate keys at boundaries (UI input, deserialization).","Log the offending key value when validation fails."],"tags":["gameframework","empty-string","settings","argument-validation"],"backgroundTag":"empty-required-field","analyzedSha":"d0c010b05167c58e92350449d04864a91ca13fd2","analyzedAt":"2026-09-15T13:37:15.352Z","contentChangedAt":"2026-09-15T13:37:15.352Z","schemaVersion":2},"datasetVersion":"2026-09-15T23:17:13.987Z"}