Arquitetura12 mai 2026·7 min
Result pattern: erros sem exceções em C#
Tornando o fluxo de erro explícito e testável, sem abusar de try/catch.
LS
Luis Soares
Arquiteto de software — .NET · Azure · IA
[ Arquitetura ]
Exceções para fluxo de negócio escondem caminhos de erro e tornam testes verbosos. O Result pattern torna falhas explícitas no tipo de retorno.
Shape mínimo
csharp
public readonly record struct Result<T>
{
public T? Value { get; }
public Error? Error { get; }
public bool IsSuccess => Error is null;
}Onde usar
Validação de entrada, regras de domínio, chamadas externas com falha esperada — tudo isso combina com Result. Reserve exceções para bugs e falhas realmente excepcionais (OOM, rede down inesperada).
Traduzir try/catch em if (result.IsFailure) parece mais código, mas o compilador passa a te lembrar de tratar o erro. Em APIs, mapeie Error para status HTTP de forma centralizada.
LS
Escrito por Luis Soares — arquiteto de software, rumo ao Microsoft MVP.