What is the difference between value types and reference types in C#?
A value type (struct, int, bool, enum) holds its data directly and is copied on assignment; a reference type (class, string, arrays) holds a pointer to the heap, and assignment copies the pointer, not the data. Passing a struct to a method and mutating it inside only changes the copy unless you pass it by ref.