Novidades no C# 7.1What's new in C# 7.1

O C# 7.1 é a primeira versão de ponto da linguagem C#.C# 7.1 is the first point release to the C# language. Ele marca uma cadência de versão maior para a linguagem.It marks an increased release cadence for the language. Use os novos recursos mais cedo, de preferência, quando cada novo recurso estiver pronto.You can use the new features sooner, ideally when each new feature is ready. O C# 7.1 adiciona a capacidade de configurar o compilador para que ele corresponda a uma versão especificada da linguagem.C# 7.1 adds the ability to configure the compiler to match a specified version of the language. Isso permite que você separe a decisão de atualizar ferramentas da decisão de atualizar versões da linguagem.That enables you to separate the decision to upgrade tools from the decision to upgrade language versions.

O C# 7.1 adiciona a seleção de versão da linguagem elemento de configuração, três novos recursos de linguagem e um novo comportamento do compilador.C# 7.1 adds the language version selection configuration element, three new language features, and new compiler behavior.

Os novos recursos de linguagem nesta versão são:The new language features in this release are:

Por fim, o compilador traz duas opções -refout e -refonly, que controlam a geração de assembly de referência.Finally, the compiler has two options -refout and -refonly that control reference assembly generation.

Para usar as últimas funcionalidades em uma versão de ponto, você precisa configurar a versão da linguagem do compilador e selecionar a versão.To use the latest features in a point release, you need to configure the compiler language version and select the version.

O restante deste artigo fornece uma visão geral de cada recurso.The remainder of this article provides an overview of each feature. Para cada recurso, você aprenderá o raciocínio por trás dele.For each feature, you'll learn the reasoning behind it. Você aprenderá a sintaxe.You'll learn the syntax. Você pode explorar esses recursos em seu ambiente usando a ferramenta global dotnet try:You can explore these features in your environment using the dotnet try global tool:

  1. Instale a ferramenta global dotnet-try.Install the dotnet-try global tool.
  2. Clone o repositório dotnet/try-samples.Clone the dotnet/try-samples repository.
  3. Definir o diretório atual do subdiretório csharp7 para o repositório try-samples.Set the current directory to the csharp7 subdirectory for the try-samples repository.
  4. Execute dotnet try.Run dotnet try.

Async mainAsync main

Um método async main permite que você use await no método Main.An async main method enables you to use await in your Main method. Anteriormente, você precisava escrever:Previously you would need to write:

static int Main()
{
    return DoAsyncWork().GetAwaiter().GetResult();
}

Agora, você pode escrever:You can now write:

static async Task<int> Main()
{
    // This could also be replaced with the body
    // DoAsyncWork, including its await expressions:
    return await DoAsyncWork();
}

Se o programa não retorna um código de saída, declare um método Main que retorna um Task:If your program doesn't return an exit code, you can declare a Main method that returns a Task:

static async Task Main()
{
    await SomeAsyncMethod();
}

Leia mais sobre os detalhes no tópico async main no guia de programação.You can read more about the details in the async main article in the programming guide.

Expressões literais padrãoDefault literal expressions

Expressões literais padrão são uma melhoria das expressões de valor padrão.Default literal expressions are an enhancement to default value expressions. Essas expressões inicializam uma variável com o valor padrão.These expressions initialize a variable to the default value. Nos casos em que você anteriormente escrevia:Where you previously would write:

Func<string, bool> whereClause = default(Func<string, bool>);

Agora você pode omitir o tipo no lado direito da inicialização:You can now omit the type on the right-hand side of the initialization:

Func<string, bool> whereClause = default;

Para saber mais, confira a seção Literais padrão do artigo do operador padrão.For more information, see the default literal section of the default operator article.

Nomes de elementos de tupla inferidosInferred tuple element names

Esse recurso é uma pequena melhoria do recurso de tuplas introduzido no C# 7.0.This feature is a small enhancement to the tuples feature introduced in C# 7.0. Muitas vezes quando você inicializa uma tupla, as variáveis usadas para o lado direito da atribuição são iguais aos nomes que você deseja usar para os elementos de tupla:Many times when you initialize a tuple, the variables used for the right side of the assignment are the same as the names you'd like for the tuple elements:

int count = 5;
string label = "Colors used in the map";
var pair = (count: count, label: label);

Os nomes dos elementos de tupla podem ser inferidos com base nas variáveis usadas para inicializar a tupla no C# 7.1:The names of tuple elements can be inferred from the variables used to initialize the tuple in C# 7.1:

int count = 5;
string label = "Colors used in the map";
var pair = (count, label); // element names are "count" and "label"

Saiba mais sobre esse recurso no artigo Tuplas.You can learn more about this feature in the Tuples article.

Restrições em parâmetros de tipo genéricoPattern matching on generic type parameters

A partir do C# 7.1, a expressão de padrão para o padrão de tipo is e switch pode ter o tipo de um parâmetro de tipo genérico.Beginning with C# 7.1, the pattern expression for is and the switch type pattern may have the type of a generic type parameter. Isso pode ser mais útil ao verificar tipos que podem ser do tipo struct ou class e você deseja evitar conversão boxing.This can be most useful when checking types that may be either struct or class types, and you want to avoid boxing.

Geração de assembly de referênciaReference assembly generation

Há duas novas opções do compilador que geram assemblies somente de referência: -refout e -refonly.There are two new compiler options that generate reference-only assemblies: -refout and -refonly. Os artigos vinculados explicam essas opções e os assemblies de referência mais detalhadamente.The linked articles explain these options and reference assemblies in more detail.