O que há de novo no C# 13

O C# 13 inclui os novos recursos a seguir. Você pode testar esses recursos usando a versão mais recente do Visual Studio 2022 ou a versão prévia do SDK do.NET 9.

C# 13 é compatível com .NET 9. Para obter mais informações, consulte Controle de versão da linguagem C#.

Você pode baixar a versão prévia do SDK do .NET 9 mais recente na página de downloads do .NET. Você também pode baixar o Visual Studio 2022 - versão prévia, que inclui a versão prévia do SDK do .NET 9.

Novos recursos são adicionados à página "Novidades no C#" quando estão disponíveis em versões prévias. A seção conjunto de trabalho da página de status do recurso roslyn acompanha quando os recursos futuros são mesclados na ramificação principal.

Observação

Estamos interessados em seus comentários sobre esses recursos. Se você encontrar problemas com qualquer um desses novos recursos, crie um problema no repositório dotnet/roslyn.

Nova sequência de escape

Você pode usar \e como uma sequência de escape de literal de caractere para o caractere ESCAPE, U+001BUnicode. Anteriormente, você usava \u001b ou \x1b. O uso de \x1b não foi recomendado porque se os próximos caracteres após 1b forem dígitos hexadecimal válidos, esses caracteres se tornarão parte da sequência de escape.

Tipo natural do grupo de métodos

Esse recurso faz pequenas otimizações para sobrecarregar a resolução envolvendo grupos de métodos. O comportamento anterior era que o compilador construísse o conjunto completo de métodos candidatos para um grupo de métodos. Se um tipo natural fosse necessário, o tipo natural era determinado a partir do conjunto completo de métodos candidatos.

O novo comportamento é remover o conjunto de métodos candidatos em cada escopo, removendo os métodos candidatos que não são aplicáveis. Normalmente, esses são métodos genéricos com a aridade errada ou restrições que não são cumpridas. O processo continuará para o próximo escopo externo somente se nenhum método candidato tiver sido encontrado. Esse processo segue mais de perto o algoritmo geral para resolução de sobrecarga. Se todos os métodos candidatos encontrados em um determinado escopo não corresponderem, o grupo de métodos não terá um tipo natural.

Você pode ler os detalhes das alterações na especificação da proposta.

Acesso implícito ao índice

O operador de índice "do final" implícito ^, agora é permitido em uma expressão de inicializador de objeto. Por exemplo, agora você pode inicializar uma matriz em um inicializador de objeto, conforme mostrado no seguinte código:

var v = new S()
{
    buffer =
    {
        [^1] = 0,
        [^2] = 1,
        [^3] = 2,
        [^4] = 3,
        [^5] = 4,
        [^6] = 5,
        [^7] = 6,
        [^8] = 7,
        [^9] = 8,
        [^10] = 9
    }
};

Em versões anteriores ao C# 13, o operador ^ não pode ser usado em um inicializador de objeto. Você precisa indexar os elementos da frente.

Confira também