{"record":{"id":"ebf8e1ee01be783f","repo":"babalae/better-genshin-impact","slug":"error-ebf8e1","errorCode":null,"errorMessage":"角色名集合中的每个元素都必须是字符串。","messagePattern":"角色名集合中的每个元素都必须是字符串。","errorType":"validation","errorClass":"ArgumentException","httpStatus":null,"severity":"error","filePath":"BetterGenshinImpact/GameTask/CharacterDevelopment/CharacterDevelopmentTask.cs","lineNumber":135,"sourceCode":"    internal static List<string> ParseCharacterNames(object characterNames)\n    {\n        ArgumentNullException.ThrowIfNull(characterNames);\n        if (characterNames is string)\n        {\n            throw new ArgumentException(\"多角色接口需要字符串集合或 JS Array，单个字符串请使用 GetCharacter。\", nameof(characterNames));\n        }\n\n        if (characterNames is not IEnumerable enumerable)\n        {\n            throw new ArgumentException(\"角色名参数必须是字符串集合或 JS Array。\", nameof(characterNames));\n        }\n\n        List<string> names = [];\n        foreach (var item in enumerable)\n        {\n            if (item is not string name)\n            {\n                throw new ArgumentException(\"角色名集合中的每个元素都必须是字符串。\", nameof(characterNames));\n            }\n\n            names.Add(NormalizeCharacterName(name));\n        }\n\n        if (names.Count == 0)\n        {\n            throw new ArgumentException(\"角色名集合不能为空。\", nameof(characterNames));\n        }\n\n        return names;\n    }\n\n    private static string NormalizeCharacterName(string characterName)\n    {\n        var name = characterName?.Trim() ?? string.Empty;\n        if (string.IsNullOrWhiteSpace(name))\n        {","sourceCodeStart":117,"sourceCodeEnd":153,"githubUrl":"https://github.com/babalae/better-genshin-impact/blob/a7cb36712dcb409be610257d877fcea3597e9d6b/BetterGenshinImpact/GameTask/CharacterDevelopment/CharacterDevelopmentTask.cs#L117-L153","documentation":"Thrown by ParseCharacterNames during iteration when an element of the characterNames collection is not a string. Each element must be a string (character name); encountering a number, null-reference boxed as object, or other type triggers this immediately.","triggerScenarios":"Called from ParseCharacterNames foreach loop. An item in the enumerable is not of type string (e.g. a number, boolean, or null boxed as object).","commonSituations":"JavaScript array contains mixed types: ['钟离', 42, true]; C# List<object> with non-string elements; null elements in the collection.","solutions":["Ensure every element in the collection is a string.","Filter or convert non-string elements before passing to GetMultiCharacters.","From JavaScript, verify all array elements are strings."],"exampleFix":"// before (wrong)\nawait dev.GetMultiCharacters(['钟离', 42]);\n// after\nawait dev.GetMultiCharacters(['钟离', '甘雨']);","handlingStrategy":"validation","validationCode":"// Filter the collection to only strings before calling\nvar validNames = ((IEnumerable)characterNames).OfType<string>().ToList();\nif (validNames.Count == 0)\n{\n    throw new ArgumentException(\"No valid string character names found.\");\n}","typeGuard":"static bool AllElementsAreString(IEnumerable enumerable)\n{\n    foreach (var item in enumerable)\n    {\n        if (item is not string) return false;\n    }\n    return true;\n}","tryCatchPattern":"try\n{\n    await dev.GetMultiCharacters(names);\n}\ncatch (ArgumentException ex) when (ex.Message.Contains(\"都必须是字符串\"))\n{\n    // Remove or convert non-string elements\n}","preventionTips":["Ensure all elements in the collection are strings before passing.","From JavaScript, verify array contains only string values.","Filter collections with OfType<string>() if unsure of element types."],"tags":["character-development","argument-validation","element-type","javascript-interop"],"backgroundTag":null,"analyzedSha":"a7cb36712dcb409be610257d877fcea3597e9d6b","analyzedAt":"2026-08-13T16:44:57.548Z","schemaVersion":2},"datasetVersion":"2026-08-13T19:17:28.613Z"}