Novidades do C# 12: Inline Arrays

Renato Groffe
3 min readAug 26, 2023

--

O C# 12 e o .NET 8 também trazem agora uma alternativa que busca oferecer uma maior performance na manipulação de arrays baseados em tipos primitivos: trata-se do atributo InlineArray. Implementado a partir do tipo InlineArrayAttribute (namespace System.Runtime.CompilerServices), esta nova opção pode ser utilizada em arrays que contem com um tamanho previamente definido.

Essa e outras novidades do .NET 8 e do C# 12 foram apresentadas em uma live recente do Canal .NET, cuja gravação está disponível no YouTube:

Como o próprio anúncio no blog oficial da plataforma .NET menciona, existe uma maior chance de muitos Desenvolvedores consumirem Inline Arrays ao invés de criá-los. Ainda assim, demonstrarei ao longo deste artigo como podemos codificar tipos que representem arrays e que se valem desta nova capacidade.

Na listagem a seguir temos um exemplo de implementação de um Inline Array, com o tipo MesesAno:

  • O atributo InlineArray deverá ser associado a um struct que faz uso de Generics, recebendo como parâmetro o tamanho (length) do array correspondente (12 posições);
  • Um membro privado (linha 8) de MesesAno representará um dos valores de uma instância deste tipo em uma determinada posição.

O arquivo .csproj do projeto descrito neste post foi alterado, com a inclusão do atributo LangVersion com o valor preview (ativando assim a utilização desta novidade do C# 12):

A listagem seguinte traz exemplos de uso de MesesAno:

  • O array eventosAcumuladosPorMes armazenará uma sequência de números inteiros (int);
  • Nas linhas 12 e 13 o array eventosAcumuladosPorMes é populado com valores simulados, com um cumulativo da quantidade de eventos técnicos no decorrer de um ano;
  • Já nas linhas 17 e 18 os diferentes valores de eventosAcumuladosPorMes serão exibidos durante a execução da aplicação.

Na próxima imagem temos o resultado da execução desta Console Application a partir do Visual Studio 2022:

Clique nesta imagem para visualizar com uma melhor resolução

Esse exemplo está disponível no GitHub:

https://github.com/renatogroffe/CSharp12-InlineArrays/tree/main

Caso achem útil esta solução, peço por favor um ⭐️ no repositório apoiando. Fica também o convite para que vocês me sigam lá no GitHub!

E concluo este artigo com um convite…

Acompanhe neste novo evento ONLINE e GRATUITO no Canal .NET dicas, truques e alternativas úteis para o desenvolvimento Back-End e de APIs REST com .NET 7, C#, ASP.NET Core e Azure Functions. Ao longo da apresentação será coberto o uso de diferentes frameworks, serviços na nuvem, mensageria e boas práticas de forma a facilitar e tornar mais dinâmica a implementação de soluções baseadas na plataforma .NET no seu dia a dia.

Teremos também novidades do .NET 8 e C# 12 demonstradas na prática!

Quando: 25/09/2023 (segunda) a partir das 21:00 — horário de Brasília

Faça sua inscrição em:
https://bit.ly/live-backend-dotnet-set-2023

--

--

Renato Groffe

Microsoft Most Valuable Professional (MVP), Multi-Plataform Technical Audience Contributor (MTAC), Software Engineer, Technical Writer and Speaker