ExpertiDict

C# · Avançado · Português · Técnico

struct mutável

/isˈtɾʊkt muˈtavɛw/substantivo

Armadilha clássica: structs com campos ou propriedades alteráveis são copiadas ao serem passadas, lidas de listas ou de campos readonly, e a alteração acontece na cópia, não no original.

Onde usar

Aparece em bugs como lista[0].X = 5 não compilar (CS1612) ou um campo readonly de struct ignorar mudanças. A regra de design é tornar structs imutáveis, preferindo readonly struct e with.

Em código

var l = new List<Ponto> { new() { X = 1 } };
// l[0].X = 5;    // erro CS1612
var p = l[0];     // cópia
p.X = 5;
Console.WriteLine(l[0].X); // 1

struct Ponto { public int X; }

Exemplos

Esse bug vem de uma struct mutável: você alterou a cópia.

Deixe a struct imutável para evitar a armadilha da cópia.

Cuidado

Não use structs mutáveis como padrão: se precisa de estado que muda, use uma classe.

Antônimos

struct imutável

Veja também

Todos os termos de C#