{"record":{"id":"cc4c32872058295d","repo":"MaterialDesignInXAML/MaterialDesignInXamlToolkit","slug":"kinds-must-contain-at-least-one-value","errorCode":null,"errorMessage":"kinds must contain at least one value","messagePattern":"kinds must contain at least one value","errorType":"exception","errorClass":"ArgumentException","httpStatus":null,"severity":"error","filePath":"src/MaterialDesignDemo.Shared/Domain/PackIconKindGroup.cs","lineNumber":9,"sourceCode":"﻿namespace MaterialDesignDemo;\n\npublic class PackIconKindGroup\n{\n    public PackIconKindGroup(IEnumerable<string> kinds)\n    {\n        if (kinds is null) throw new ArgumentNullException(nameof(kinds));\n        var allValues = kinds.ToList();\n        if (!allValues.Any()) throw new ArgumentException($\"{nameof(kinds)} must contain at least one value\");\n        Kind = allValues.First();\n        Aliases = allValues\n            .OrderBy(x => x, StringComparer.InvariantCultureIgnoreCase)\n            .ToArray();\n    }\n\n    public string Kind { get; }\n    public string[] Aliases { get; }\n}\n","sourceCodeStart":1,"sourceCodeEnd":19,"githubUrl":"https://github.com/MaterialDesignInXAML/MaterialDesignInXamlToolkit/blob/98edec3a0b96ef272c587b14bcd67ef5f928a7ed/src/MaterialDesignDemo.Shared/Domain/PackIconKindGroup.cs#L1-L19","documentation":"`PackIconKindGroup` (MaterialDesignDemo.Shared) groups multiple icon-kind names under one canonical kind. Its constructor requires the `kinds` enumeration to contain at least one element; otherwise it throws `ArgumentException` because it must pick `allValues.First()` as the canonical `Kind`.","triggerScenarios":"Constructing `new PackIconKindGroup(kinds)` where `kinds` is empty (e.g. a LINQ filter/`Distinct` that produced zero results, or an empty array literal).","commonSituations":"Generating kind groups from icon-name data where a group ended up empty after deduplication; reflecting over `PackIconKind` names and filtering into an empty bucket; data entry missing the primary kind name.","solutions":["Filter out empty groups before constructing: `if (!kinds.Any()) continue;`.","Ensure the source name list always includes the canonical kind name plus any aliases.","Validate inputs in the caller and log/skip rather than construct.","Add a unit test that groups built from the full icon name set are never empty."],"exampleFix":"// before\nvar group = new PackIconKindGroup(filteredKinds); // throws if empty\n\n// after\nif (filteredKinds is null || !filteredKinds.Any()) continue;\nvar group = new PackIconKindGroup(filteredKinds);","handlingStrategy":"validation","validationCode":"var kinds = GroupKinds(rawNames);\nif (kinds is null || !kinds.Any()) continue;\nvar group = new PackIconKindGroup(kinds);","typeGuard":"static bool HasAnyKind(IEnumerable<string>? kinds)\n    => kinds is not null && kinds.Any();","tryCatchPattern":null,"preventionTips":["Filter empty groups before constructing PackIconKindGroup.","Ensure the source name list always includes the canonical kind name.","Test group generation against the full icon name set."],"tags":["wpf","pack-icon","material-design","validation","constructor","demo-code"],"backgroundTag":null,"analyzedSha":"98edec3a0b96ef272c587b14bcd67ef5f928a7ed","analyzedAt":"2026-08-13T14:31:19.111Z","schemaVersion":2},"datasetVersion":"2026-08-13T19:17:28.613Z"}