What problem does it solve? Choosing between class, struct, and record in .NET has cascading effects on allocation, GC pressure, and API shape, and wrong choices cause hidden costs like defensive copies, boxing, and unnecessary heap allocations. This Skill provides decision matrices and concrete patterns so type design choices are made deliberately instead of by default. ## Core Features & Use Cases - Struct vs Class Decision Matrix: Size, lifetime, identity, and mutability criteria with byte-size thresholds for choosing value vs reference types. - Performance Patterns: Sealed-by-default classes, readonly structs to eliminate defensive copies, static pure functions, deferred enumeration, and ValueTask guidance for hot paths. - Memory and Collection Selection: Span<T> vs Memory<T> rules for sync and async code, FrozenDictionary for read-heavy lookups, and immutable collection return types for public APIs. - Use Case: When reviewing a pull request that introduces a mutable struct or returns List<T> from a public API, apply the checklists and anti-patterns to identify and fix the performance issues. ## Quick Start Review this C# type definition and tell me whether it should be a class, readonly struct, or record based on the decision matrix.