sharpessentials.functions
1.2.22
dotnet add package sharpessentials.functions --version 1.2.22
NuGet\Install-Package sharpessentials.functions -Version 1.2.22
<PackageReference Include="sharpessentials.functions" Version="1.2.22" />
<PackageVersion Include="sharpessentials.functions" Version="1.2.22" />
<PackageReference Include="sharpessentials.functions" />
paket add sharpessentials.functions --version 1.2.22
#r "nuget: sharpessentials.functions, 1.2.22"
#:package sharpessentials.functions@1.2.22
#addin nuget:?package=sharpessentials.functions&version=1.2.22
#tool nuget:?package=sharpessentials.functions&version=1.2.22
SharpEssentials: A Biblioteca de Utilitários C# Definitiva
SharpEssentials é uma biblioteca C# moderna e poderosa, projetada para acelerar seu desenvolvimento .NET. Ela oferece uma coleção curada de extensões, padrões de projeto e helpers que eliminam código repetitivo, impõem boas práticas e otimizam tarefas comuns, permitindo que você foque em construir aplicações robustas, e não em reinventar a roda.
➤ Autor
Este projeto é mantido com dedicação por Anderson V. B. Costa.
- GitHub: @avbctr
- LinkedIn: Anderson V. B. Costa
➤ Por que usar SharpEssentials?
- Produtividade Acelerada: Reduza linhas de código com extensões e helpers para tarefas diárias.
- Código Limpo e Legível: Implemente padrões como
ResulteFluent Builderpara um código mais expressivo e de fácil manutenção. - Segurança e Resiliência: Crie clientes HTTP resilientes com políticas de
RetryeCircuit Breaker, e utilize helpers de criptografia. - Foco no Desenvolvedor Brasileiro: Um conjunto de ferramentas de alta qualidade para lidar com as complexidades do Brasil: NF-e, Validação de Documentos e Certificados Digitais.
- Boas Práticas Embarcadas: O
AsyncToolkitpromove o uso correto deConfigureAwait(false)para evitar deadlocks em suas aplicações.
➤ Instalação
.NET CLI:
dotnet add package sharpessentials.functions
Package Manager Console:
Install-Package sharpessentials.functions
➤ Catálogo de Funcionalidades e Exemplos
Aqui está uma visão geral das principais funcionalidades e como usá-las.
🏛️ Padrões de Projeto (Design Patterns)
Result Pattern
Evite exceções para controle de fluxo e trate sucessos e falhas de forma explícita.
public Result<User> GetUserById(int id)
{
var user = _userRepository.Find(id);
if (user == null)
return Result<User>.Failure(Error.NotFound($"Usuário com ID {id} não encontrado."));
return Result<User>.Success(user);
}
// Como usar:
var userResult = GetUserById(101);
userResult.Match(
onSuccess: user => Console.WriteLine($"Bem-vindo, {user.Name}!"),
onFailure: errors => errors.ForEach(e => Console.WriteLine($"Erro: {e.Code} - {e.Message}"))
);
Fluent Builder (SQL & HTTP)
Construa objetos complexos com uma API fluente e legível.
SQL Query Builder:
var query = SqlQueryBuilder.Create()
.Select("Id", "Nome", "Email")
.From("Usuarios", "u")
.Join("Departamentos", "d", "u.DepartamentoId = d.Id")
.Where("d.Nome", "=", "Engenharia")
.And("u.Ativo", "=", 1)
.OrderBy("u.Nome")
.OffsetFetch(0, 50);
string sql = query.Build();
var parameters = query.Parameters;
// Use 'sql' e 'parameters' com Dapper, ADO.NET, etc.
HTTP Client Builder (com Polly):
var httpClient = new HttpClientBuilder()
.WithBaseAddress("https://api.example.com")
.WithBearerToken("seu_token_jwt")
.WithTimeout(TimeSpan.FromSeconds(30))
.WithRetryPolicy(3, TimeSpan.FromSeconds(2)) // 3 tentativas com 2s de espera
.WithCircuitBreaker(5, TimeSpan.FromMinutes(1)) // Abre o circuito por 1 min após 5 falhas
.Build();
var response = await httpClient.GetAsync("/data");
Smart Enum
Crie enums mais inteligentes e poderosos que podem conter comportamento.
public class StatusPedido : SmartEnum<StatusPedido, int>
{
public static readonly StatusPedido Aguardando = new(1, "Aguardando Pagamento");
public static readonly StatusPedido Pago = new(2, "Pagamento Aprovado");
public static readonly StatusPedido Enviado = new(3, "Enviado");
public static readonly StatusPedido Cancelado = new(4, "Cancelado");
private StatusPedido(int value, string name) : base(value, name) { }
}
// Como usar:
var status = StatusPedido.FromValue(2);
Console.WriteLine(status.Name); // "Pagamento Aprovado"
⚡ Kit de Ferramentas Assíncrono (Async Toolkit)
Escreva código assíncrono mais seguro e legível.
// Evite deadlocks em bibliotecas com SafeAwait
public async Task ProcessDataAsync()
{
var data = await _apiClient.GetDataAsync().SafeAwait();
// ... processa os dados
}
// Execute tarefas em background sem travar a thread principal
_loggingService.LogAsync("Iniciando operação...").FireAndForgetSafe(
onError: ex => Console.WriteLine($"Erro no log: {ex.Message}")
);
// Encademaneto fluente de Tasks
await GetUserAsync()
.Then(user => ProcessUserAsync(user))
.Then(result => Console.WriteLine("Finalizado!"));
🧩 Extensões de Tipos (Type Extensions)
String
Dezenas de helpers para manipulação de strings.
// Limpa e formata
string suja = " (123)-456-7890 ";
string soNumeros = suja.ReturnOnlyNumericString(); // "1234567890"
string comAcentos = "Solução de caffè";
string semAcentos = comAcentos.LimparTexto(); // "Solucao de caffe"
// Cria uma URL amigável
string titulo = "Tudo sobre o .NET 8!";
string url = titulo.CreateStringUrl(); // "tudo-sobre-o-net-8"
DateTime
Funções poderosas para manipulação de datas e horas.
var hoje = DateTime.Now;
// Adiciona 5 dias úteis (ignorando fins de semana e feriados)
var dataEntrega = hoje.AddBusinessDays(5, listaDeFeriados);
// Converte para o fuso horário de São Paulo
var dataIso = "2023-10-26T22:00:00Z";
DateTime dataBrasilia = dataIso.ToBrazilLocalTime();
// Pega o primeiro e último dia do mês
var primeiroDia = hoje.GetFirstDayOfMonth();
var ultimoDia = hoje.GetLastDayOfMonth();
IEnumerable & JSON
// Itera sobre uma lista
minhaLista.ForEach(item => Console.WriteLine(item));
// Serializa e desserializa objetos
var user = new User { Id = 1, Name = "Anderson" };
string json = user.ToJson();
var userObj = json.FromJson<User>();
🇧🇷 Funcionalidades para Desenvolvedores no Brasil
Um conjunto de ferramentas de primeira classe para os desafios do desenvolvimento de software no Brasil.
Validação de Documentos
Valide documentos brasileiros de forma simples e eficaz.
string cnpj1 = "11.222.333/0001-44";
string cnpj2 = "11222333000144";
if (cnpj1.IsValidCNPJ())
{
Console.WriteLine("CNPJ 1 é válido!");
}
if (cnpj2.IsValidCNPJ())
{
Console.WriteLine("CNPJ 2 é válido!");
}
Manipulação de NF-e (Nota Fiscal Eletrônica)
Um conjunto completo de extensões para criar, assinar, validar e manipular o XML da NF-e.
// Exemplo conceitual de assinatura de um XML de evento
var xmlEvento = new XmlDocument();
xmlEvento.Load("evento.xml");
var certificado = CertificadoDigitalHelper.LoadCertWithKey(bytesDoPfx, "senha");
var xmlAssinado = Assinador.AssinarXml(xmlEvento, "infEvento", certificado);
// Serializa/Desserializa objetos de/para XML no padrão da NF-e
var nfeObj = NFeExtensions.DeserializarNFe<TNFe>(xmlString);
var xmlDoc = NFeExtensions.Serializar(nfeObj);
Certificados Digitais
Carregue certificados digitais (PFX/P12) de forma segura a partir de arquivos ou de uma base de dados criptografada.
// Carrega um certificado a partir de um array de bytes
byte[] pfxBytes = File.ReadAllBytes("meu_certificado.pfx");
string senha = "1234";
X509Certificate2 cert = pfxBytes.LoadCertWithKey(senha);
// Carrega um certificado criptografado do banco de dados
X509Certificate2 certDoBanco = CertificadoDigitalHelper.LoadCertificateFromDatabase(
encryptedCertBytes,
iv,
encryptedPassword,
"minha-chave-de-criptografia-do-sistema"
);
➤ Comunidade
Junte-se à nossa comunidade no Telegram para tirar dúvidas, compartilhar ideias e ficar por dentro das novidades!
❤️ Apoie Meu Trabalho
Gostou do meu trabalho ou dos meus projetos free? Considere me apoiar! Sua contribuição me ajuda a continuar criando e compartilhando conteúdo de qualidade com a comunidade.
<p> <a href="https://go.avbc.dev/i9HwDKlQ" target="_blank"><img src="https://img.shields.io/badge/Buy%20Me%20A%20Coffee-FFDD00?style=for-the-badge&logo=buy-me-a-coffee&logoColor=black" alt="Buy Me A Coffee"></a> <a href="https://go.avbc.dev/8VLnyhHA" target="_blank"><img src="https://img.shields.io/badge/PayPal-00457C?style=for-the-badge&logo=paypal&logoColor=white" alt="PayPal"></a> <a href="https://avbc.dev/fIYqVEbt" target="_blank"> <img src="https://img.shields.io/badge/Binance-FCD535?style=for-the-badge&logo=binance&logoColor=black" alt="Binance"> </a> </p>
➤ Contribuição
Sua contribuição é muito bem-vinda! Por favor, siga estes passos:
- Faça um Fork do repositório.
- Crie uma nova branch (
git checkout -b feature/MinhaFeature). - Faça o commit de suas mudanças (
git commit -m 'Adiciona MinhaFeature'). - Faça o push para a branch (
git push origin feature/MinhaFeature). - Abra um Pull Request.
➤ Licença
Distribuído sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net8.0
- BouncyCastle.Cryptography (>= 2.6.2)
- Microsoft.Extensions.Http.Polly (>= 9.0.9)
- Polly (>= 8.6.4)
- Polly.Extensions (>= 8.6.4)
- SixLabors.Fonts (>= 2.1.3)
- SixLabors.ImageSharp (>= 3.1.11)
- SixLabors.ImageSharp.Drawing (>= 2.1.7)
- System.Security.Cryptography.Xml (>= 9.0.9)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.2.22 | 297 | 10/28/2025 |
| 1.2.21 | 239 | 9/29/2025 |
| 1.2.20 | 191 | 9/29/2025 |
| 1.2.19 | 215 | 7/18/2025 |
| 1.2.18 | 197 | 7/14/2025 |
| 1.2.17 | 126 | 7/12/2025 |
| 1.2.16 | 211 | 6/23/2025 |
| 1.2.15 | 193 | 6/19/2025 |
| 1.2.14 | 181 | 6/19/2025 |
| 1.2.13 | 197 | 6/18/2025 |
| 1.2.12 | 196 | 6/16/2025 |
| 1.2.11 | 247 | 6/13/2025 |
| 1.2.10 | 239 | 6/8/2025 |
| 1.2.9 | 112 | 6/6/2025 |
| 1.2.8 | 259 | 5/23/2025 |
| 1.2.7 | 196 | 5/21/2025 |
| 1.2.6 | 191 | 5/21/2025 |
| 1.2.5 | 190 | 5/19/2025 |
| 1.2.4 | 179 | 5/19/2025 |
| 1.2.3 | 191 | 5/19/2025 |