Novidades do C# 11: Generic Math

Renato Groffe
2 min readMay 6, 2023

--

A implementação em C# de cálculos matemáticos a partir de estruturas como métodos costuma se basear em um tipo numérico específico, com parâmetros e resultados sendo declarados com base nesta escolha. A eventual necessidade de suportar outros tipos levaria a sobrecargas de um método inicial e, muito provavelmente, envolveria duplicação de linhas de código.

O C# 11 oferece uma solução a este tipo de limitação, através de um conjunto de novos recursos que recebeu o nome de Generic Math. Essas novas funcionalidades estão agrupadas no namespace System.Numerics.

A classe SaldoBancario traz um exemplo de implementação baseada em Generic Math:

  • O método genérico CalcularConsolidado referencia o tipo T, o qual se baseia na interface genérica INumber. Esta operação será usada para calcular entradas e saídas de uma conta bancária;
  • Com INumber podemos utilizar diferentes tipos numéricos ao acionar o método CalcularConsolidado, tais como int, double, decimal e char (apenas para citar algumas das possibilidades).

Na próxima listagem temos exemplos de uso do método CalcularConsolidado:

  • Foram realizados cálculos com os tipos double (linhas 13 e 14) e decimal (linhas 22 e 23);
  • Com a utilização de Generic Math obtemos um maior reaproveitamento de código, evitando com isto a necessidade de implementações para cada tipo numérico previsto.

A imagem seguinte traz o resultado da execução deste código a partir do Visual Studio 2022:

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

Esse exemplo também está disponível no GitHub:

https://github.com/renatogroffe/CSharp11-GenericMath

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!

Outras novidades do C# 11 foram demonstradas em 2 lives recentes no Canal .NET:

--

--

Renato Groffe
Renato Groffe

Written by Renato Groffe

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

No responses yet