Esse é o 9º post da série sobre C# 7. Pra acompanhar a série você pode seguir a tag C#7 no blog ou voltar no post que agrega a série.

Novidades do C# 7: Expressões throw

A partir do C# 7 é possível lançar exceções a partir de expressões utilizando a mesma palavra-chave throw. Anteriormente, throw só era permitido em declarações. Com throw sendo parte de expressões é possível agora deixar o código mais limpo e objetivo em algumas construções em que antes era impossível utilizá-lo.

Por exemplo, em um operação null coalesce:

private Config configuracao = CarregarConfig() ??
    throw new InvalidOperationException("Impossível ler a configuração");

O caso acima é particularmente interessante porque sem expressões throw seríamos obrigados a criar um construtor e utilizar um if, ou seja, o código fica muito mais simples e objetivo.

Outro exemplo interessante é com expression bodied members. Por exemplo:

private int Id => throw new NotImplementedException();

É importante notar que essas expressões não são permitidas em qualquer local em que uma valor for experado. Você não pode passar uma throw expression para uma chamada de método, por exemplo. Elas são permitidas onde fazem sentido, como nos exemplos acima.

Você consegue ler sobre as throw expressions nos docs das novidades do C# 7 no Microsoft Docs.

Giovanni Bassi

Arquiteto e desenvolvedor, agilista, escalador, provocador. É fundador e CSA da Lambda3. Programa porque gosta. Acredita que pessoas autogerenciadas funcionam melhor e por acreditar que heterarquia é mais eficiente que hierarquia. Foi reconhecido Microsoft MVP há mais de dez anos, dos mais de vinte que atua no mercado. Já palestrou sobre .NET, Rust, microsserviços, JavaScript, TypeScript, Ruby, Node.js, Frontend e Backend, Agile, etc, no Brasil, e no exterior. Liderou grupos de usuários em assuntos como arquitetura de software, Docker, e .NET.