Qual é a diferença entre value types e reference types em C#?
Um value type (struct, int, bool, enum) guarda seus dados diretamente e é copiado na atribuição; um reference type (class, string, arrays) guarda um ponteiro para a heap, e na atribuição o ponteiro é copiado, não os dados. Passar uma struct para um método e modificá-la dentro dele só muda a cópia, a menos que você a passe por ref.