{"record":{"id":"667726b3a7a31749","repo":"TheAlgorithms/C-Sharp","slug":"nameof-coinsasarray-cannot-contain-numbers-less-than-or","errorCode":null,"errorMessage":"{nameof(coinsAsArray)} cannot contain numbers less than or equal to zero","messagePattern":"(.+?) cannot contain numbers less than or equal to zero","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"Algorithms/Problems/DynamicProgramming/CoinChange/DynamicCoinChangeSolver.cs","lineNumber":158,"sourceCode":"        var coinsAsArray = coinsArray.ToArray();\n\n        if (coinsAsArray.Length == 0)\n        {\n            throw new InvalidOperationException($\"Coins array cannot be empty {nameof(coinsAsArray)}.\");\n        }\n\n        var coinsContainOne = coinsAsArray.Any(x => x == 1);\n\n        if (!coinsContainOne)\n        {\n            throw new InvalidOperationException($\"Coins array must contain coin 1 {nameof(coinsAsArray)}.\");\n        }\n\n        var containsNonPositive = coinsAsArray.Any(x => x <= 0);\n\n        if (containsNonPositive)\n        {\n            throw new InvalidOperationException(\n                $\"{nameof(coinsAsArray)} cannot contain numbers less than or equal to zero\");\n        }\n\n        var containsDuplicates = coinsAsArray.GroupBy(x => x).Any(g => g.Count() > 1);\n\n        if (containsDuplicates)\n        {\n            throw new InvalidOperationException($\"Coins array cannot contain duplicates {nameof(coinsAsArray)}.\");\n        }\n    }\n}\n","sourceCodeStart":140,"sourceCodeEnd":170,"githubUrl":"https://github.com/TheAlgorithms/C-Sharp/blob/96e2905cab7bc6b33ac0a34ee5bb82ddccbcbb6c/Algorithms/Problems/DynamicProgramming/CoinChange/DynamicCoinChangeSolver.cs#L140-L170","documentation":"ValidateCoinsArray rejects coin systems containing zero or negative denominations, since coin values must be positive integers for change-making to be meaningful. It throws InvalidOperationException naming the offending parameter coinsAsArray.","triggerScenarios":"Calling GenerateSingleCoinChanges with coins such as [0, 1, 5] or [-1, 2, 5] — any element <= 0.","commonSituations":"Parsing denominations from user input or a file where an empty/0 default slipped in; integer parsing of malformed rows yielding negatives; uninitialized placeholder entries in the array.","solutions":["Filter out non-positive values: coins.Where(c => c > 0) before calling.","Fix the data source that produced 0/negative denominations.","Add caller-side validation with a clear error message naming the bad entry."],"exampleFix":"// before\nvar coins = ParseCoins(userInput); // may contain 0\nsolver.GenerateSingleCoinChanges(coins, amount);\n// after\nvar coins = ParseCoins(userInput).Where(c => c > 0).Distinct().ToArray();\nsolver.GenerateSingleCoinChanges(coins, amount);","handlingStrategy":"validation","validationCode":"if (coins != null && coins.Any(c => c <= 0)) throw new ArgumentException(\"All coin values must be positive.\", nameof(coins));","typeGuard":null,"tryCatchPattern":"try { solver.GenerateSingleCoinChanges(coins, amount); }\ncatch (InvalidOperationException ex) { Console.Error.WriteLine($\"Invalid coin values: {ex.Message}\"); }","preventionTips":["Sanitize parsed input with c > 0 filter","Never pass raw user input as denominations","Validate at the data-loading boundary"],"tags":["invalid-argument-value","coin-change","validation"],"backgroundTag":"invalid-argument-value","analyzedSha":"96e2905cab7bc6b33ac0a34ee5bb82ddccbcbb6c","analyzedAt":"2026-09-13T17:04:01.438Z","contentChangedAt":"2026-09-13T17:04:01.438Z","schemaVersion":2},"datasetVersion":"2026-09-16T04:17:20.429Z"}