DEV Community

William
William

Posted on

Como trabalhar com Records, Tipos Anônimos e Mutação não destrutiva

Image description

Fala Dev!!, hoje vou compartilhar alguns pontos relevantes que você pode fazer com os registros (Record) e tipos anônimos. Vou mostrar também conceitos de mutação não destrutiva (non-destructive ). E falar quando utilizar e por que usar esses recursos do C#.

Qual é desse Record?

Com o C# 9 podemos usar record que são um novo tipo de referência. Que você pode criar em vez de classes ou structs.

O C# 10 introduziu a estrutura Record, para que você possa definir como tipos de valor. Os registros são distintos das classes em que os tipos usam igualdade baseada em valor.

💡 Tipos de valor? vamos revisar.

Veja no exemplo:

public record Customer(string Name, double Height);
Enter fullscreen mode Exit fullscreen mode

Está é a forma de declarar um record, chamado de registro posicional. Definido como construtor primário.

As propriedades Name e Address são propriedades apenas de inicialização, o que significa que elas só podem ser definidas no construtor ou usando um inicializador de propriedade.

Sobre Non-Destructive mutação usando a expressão With

Não podemos modificar as propriedades do nosso record, porque as propriedades são apenas init. No entanto, podemos usar a expressão with (introduzida no C# 9) para criar uma nova instância do nosso registro com valores modificados.

Uma expressão with produz uma cópia de seu operando com as propriedades e campos especificados modificados

Vejamos no exemplo:

var firstRegistration = new Customer("William", 1.70);

var changeSize = firstRegistration with
{
   Height = 1.75
};
Enter fullscreen mode Exit fullscreen mode

Fica ligado! ⚠️

  1. A instância firstRegistration permanece inalterada.

  2. Expressão with cria uma nova instância do record apenas com a propriedade Height modificada.

Como prometido que iria falar sobre Tipos Anônimos, então deixe-me mostrar algo surpreendente.

Anonymous Types e Non-Destructive mutação:

Você sabe como utilizar o expressão with com tipos anônimos?

Criando um tipo anonymous:

var secondRegistration = new 
{
   Name = "Maria",
   Height = 1.90
};
Enter fullscreen mode Exit fullscreen mode

É assim que modificamos usando a expressão with:

var thirdRegistration = secondRegistration with  
{
   Name = "João"
};
Enter fullscreen mode Exit fullscreen mode

E novamente as mesmas regras se aplicam:

  1. A instância original secondRegistration permanece inalterada.

  2. A expressão with acaba criando uma nova instância de tipo anônimo onde temos apenas a propriedade Name modificada.

Onde esté recurso pode ser útil? Utilizando métodos LINQ, Carregar um tipo anônimo do banco de dados em que alguma propriedade esteja em valor default. Você também pode está utilizando para calcular valores dessas propriedades em memoria. Mais sobre non-destructive


Gostou da dica? Deixe seu like!!

Image description
Participe do nosso grupo: https://discord.gg/pzU5sDBS6B

Vai pra cima DEV!!

Top comments (0)