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);
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
};
Fica ligado! ⚠️
A instância firstRegistration permanece inalterada.
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
};
É assim que modificamos usando a expressão with:
var thirdRegistration = secondRegistration with
{
Name = "João"
};
E novamente as mesmas regras se aplicam:
A instância original secondRegistration permanece inalterada.
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!!
Participe do nosso grupo: https://discord.gg/pzU5sDBS6B
Vai pra cima DEV!!
Top comments (0)