O C# 7 introduziu uma das maiores atualizações da linguagem até então, com foco em desempenho, clareza de código e suporte moderno a tuplas, padrões e retornos por referência.
Pouco tempo depois, o C# 7.1 foi lançado como uma atualização incrivelmente leve, mas importante para melhorar interoperabilidade e legibilidade — especialmente com código assíncrono.
📦 C# 7.0 – O que trouxe de novo?
O C# 7.0 trouxe grandes adições à linguagem. Os principais recursos foram:
✅ Destaques do C# 7.0
Recurso | Descrição |
---|---|
Tuplas com nomes | var pessoa = (nome: "Ana", idade: 30); |
out variables |
Declaração inline em métodos com out
|
Pattern Matching |
is , switch com padrões |
Deconstruction | (var nome, var idade) = pessoa; |
ref return e ref locals |
Retorno e armazenamento por referência |
local functions |
Funções locais dentro de métodos |
throw expressions |
Exceções inline |
Melhorias em default , literal e digit separators |
1_000_000 , default(int) etc |
🧪 Exemplos de C# 7.0
Tuplas nomeadas
(string nome, int idade) pessoa = ("Ana", 30);
Console.WriteLine($"{pessoa.nome} tem {pessoa.idade} anos.");
Pattern Matching
if (obj is Pessoa p && p.Idade > 18)
Console.WriteLine($"{p.Nome} é maior de idade.");
Funções locais
void MostrarMensagem(string nome)
{
string GerarSaudacao() => $"Olá, {nome}";
Console.WriteLine(GerarSaudacao());
}
⚙️ C# 7.1 – O que mudou?
O C# 7.1 foi uma atualização incremental, lançado com o .NET Core 2.0, focado em pequenos aprimoramentos, especialmente para trabalhar com async
e retorno Main()
, além de sintaxes mais elegantes.
✅ Novidades do C# 7.1
Recurso | Descrição |
---|---|
async Main |
Permite Main assíncrono com Task ou Task<int>
|
Inferência com default literal |
default sem tipo explícito (default → default(string) ) |
Pattern matching com genéricos | Agora funciona corretamente com tipos genéricos |
Expressões inferred tuple names |
Nomes inferidos em tuplas (var pessoa = (nome, idade); ) |
🧪 Exemplos de C# 7.1
async Main
static async Task Main(string[] args)
{
await Task.Delay(1000);
Console.WriteLine("Olá, mundo assíncrono!");
}
🚀 Antes do C# 7.1,
Main
não podia serasync
.
default
literal
string nome = default; // Em vez de default(string)
Tuple com nomes inferidos
var nome = "Ana";
var idade = 30;
var pessoa = (nome, idade); // nome e idade viram nomes da tupla
Console.WriteLine($"{pessoa.nome} tem {pessoa.idade} anos.");
Pattern Matching com genéricos
bool IsNulo<T>(T obj) => obj is null;
⚠️ Como habilitar o C# 7.1?
Por padrão, projetos antigos usam a versão do compilador baseada no target framework. Para usar o C# 7.1:
🔧 csproj
<LangVersion>7.1</LangVersion>
Ou, para sempre pegar a versão mais recente:
<LangVersion>latest</LangVersion>
🧠 Comparativo final
Recurso | C# 7.0 | C# 7.1 |
---|---|---|
Tuplas com nome | ✅ | ✅ |
Deconstruction | ✅ | ✅ |
Pattern Matching básico | ✅ | ✅ |
Pattern Matching com genéricos | ❌ | ✅ |
async Main |
❌ | ✅ |
default literal inferido |
❌ | ✅ |
Nomes inferidos em tuplas | ❌ | ✅ |
🎓 Conclusão
- O C# 7.0 foi uma versão robusta que trouxe recursos essenciais como tuplas modernas, pattern matching e funções locais.
- O C# 7.1 focou em melhorias sutis, especialmente para quem usa programação assíncrona e tuplas com mais legibilidade.
✅ Se você está em um projeto com C# 7.0 e deseja pequenas melhorias na linguagem, vale a pena migrar para o 7.1 com segurança.
🤝 Conecte-se Comigo
Se você está modernizando código legado ou quer aprender a fundo C# e .NET, bora conversar:
- ✍️ Medium
- 📬 contato@dopme.io