{"record":{"id":"b5779d1923b0e6a0","repo":"TheAlgorithms/C-Sharp","slug":"coins-array-cannot-contain-duplicates-nameof-coinsasarray","errorCode":null,"errorMessage":"Coins array cannot contain duplicates {nameof(coinsAsArray)}.","messagePattern":"Coins array cannot contain duplicates (.+?)\\.","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"Algorithms/Problems/DynamicProgramming/CoinChange/DynamicCoinChangeSolver.cs","lineNumber":166,"sourceCode":"\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":148,"sourceCodeEnd":170,"githubUrl":"https://github.com/TheAlgorithms/C-Sharp/blob/96e2905cab7bc6b33ac0a34ee5bb82ddccbcbb6c/Algorithms/Problems/DynamicProgramming/CoinChange/DynamicCoinChangeSolver.cs#L148-L170","documentation":"ValidateCoinsArray requires all coin denominations to be unique. Duplicate entries do not change the solution but break the solver's assumptions about the coin system, so it throws InvalidOperationException when GroupBy detects any value appearing more than once.","triggerScenarios":"Calling GenerateSingleCoinChanges with coins such as [1, 1, 5, 10] or [2, 5, 5].","commonSituations":"Merging denomination lists from multiple sources without deduplication; appending a default coin set to user-supplied coins; Concat of two overlapping arrays.","solutions":["Deduplicate the array: coins.Distinct().ToArray() before calling.","Fix the merge/append logic that produced duplicates.","Validate and normalize input denominations once at the boundary of your application."],"exampleFix":"// before\nvar coins = defaults.Concat(userCoins).ToArray(); // may duplicate\nsolver.GenerateSingleCoinChanges(coins, amount);\n// after\nvar coins = defaults.Concat(userCoins).Distinct().ToArray();\nsolver.GenerateSingleCoinChanges(coins, amount);","handlingStrategy":"validation","validationCode":"coins = (coins ?? Array.Empty<int>()).Where(c => c > 0).Distinct().ToArray();","typeGuard":null,"tryCatchPattern":"try { solver.GenerateSingleCoinChanges(coins, amount); }\ncatch (InvalidOperationException ex) { Console.Error.WriteLine($\"Duplicate coins: {ex.Message}\"); }","preventionTips":["Call .Distinct() whenever merging denomination sources","Normalize coin sets once, early","Add unit tests for merged coin inputs"],"tags":["invalid-argument-value","coin-change","duplicates"],"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"}