{"record":{"id":"50d3477b31efa9e3","repo":"babalae/better-genshin-impact","slug":"itemnames","errorCode":null,"errorMessage":"参数ItemNames不能包含空名称","messagePattern":"参数ItemNames不能包含空名称","errorType":"validation","errorClass":"ArgumentException","httpStatus":null,"severity":"error","filePath":"BetterGenshinImpact/GameTask/Common/Job/CountInventoryItemParam.cs","lineNumber":55,"sourceCode":"        bool hasItemNames = ItemNames.Count > 0;\n        if (!hasItemName)\n        {\n            ItemName = null;\n        }\n\n        if (hasItemName && hasItemNames)\n        {\n            throw new ArgumentException($\"参数{nameof(ItemName)}和{nameof(ItemNames)}不能同时使用\");\n        }\n\n        if (!hasItemName && !hasItemNames)\n        {\n            throw new ArgumentException($\"参数{nameof(ItemName)}和{nameof(ItemNames)}不能同时为空\");\n        }\n\n        if (ItemNames.Any(string.IsNullOrWhiteSpace))\n        {\n            throw new ArgumentException($\"参数{nameof(ItemNames)}不能包含空名称\");\n        }\n    }\n}\n","sourceCodeStart":37,"sourceCodeEnd":59,"githubUrl":"https://github.com/babalae/better-genshin-impact/blob/a7cb36712dcb409be610257d877fcea3597e9d6b/BetterGenshinImpact/GameTask/Common/Job/CountInventoryItemParam.cs#L37-L59","documentation":"Thrown as ArgumentException by CountInventoryItemParam.Validate when the ItemNames list contains one or more entries that are null, empty, or whitespace-only. Even a single blank entry would cause downstream item matching to silently fail or match nothing, so the validator rejects the whole list upfront.","triggerScenarios":"Setting ItemNames to a list like [\"摩拉\", \"\", \"原石\"] or [\"摩拉\", null, \"原石\"] — any whitespace entry triggers it because ItemNames.Any(string.IsNullOrWhiteSpace) returns true.","commonSituations":"A list was built from user input or split from a comma-separated string without trimming/filtering empties. A deserialization produced null or empty strings. An upstream filtering step was skipped.","solutions":["Filter out blank entries before assigning: param.ItemNames = names.Where(n => !string.IsNullOrWhiteSpace(n)).ToList().","Validate source input (e.g., split result) and remove empty tokens immediately after splitting.","Add per-entry validation in the UI/script layer before constructing the param."],"exampleFix":"// before\nparam.ItemNames = rawNames.Split(',').ToList(); // may contain \"\"\nparam.Validate(); // throws\n\n// after\nparam.ItemNames = rawNames.Split(',')\n    .Select(n => n.Trim())\n    .Where(n => !string.IsNullOrWhiteSpace(n))\n    .ToList();\nparam.Validate();","handlingStrategy":"validation","validationCode":"param.ItemNames = param.ItemNames\n    .Where(n => !string.IsNullOrWhiteSpace(n))\n    .Select(n => n.Trim())\n    .ToList();","typeGuard":"static bool ItemNamesAreClean(List<string> names)\n    => names.All(n => !string.IsNullOrWhiteSpace(n));","tryCatchPattern":"try { param.Validate(); }\ncatch (ArgumentException ex) when (ex.Message.Contains(\"不能包含空名称\")) { /* filter blanks, retry */ }","preventionTips":["Always filter and trim list entries at construction time.","When splitting user input, immediately remove empty tokens."],"tags":["validation","inventory","argument-error"],"backgroundTag":null,"analyzedSha":"a7cb36712dcb409be610257d877fcea3597e9d6b","analyzedAt":"2026-08-13T16:44:57.548Z","schemaVersion":2},"datasetVersion":"2026-08-13T19:17:28.613Z"}