Novedades de C# 7.1What's new in C# 7.1

C# 7.1 es la primera versión secundaria del lenguaje C#.C# 7.1 is the first point release to the C# language. Marca una cadencia de versión mayor en el lenguaje.It marks an increased release cadence for the language. Podrá usar las nuevas características más pronto, lo ideal es que cuando vayan estando listas.You can use the new features sooner, ideally when each new feature is ready. C# 7.1 incluye la posibilidad de configurar el compilador para que coincida con una versión especificada del lenguaje.C# 7.1 adds the ability to configure the compiler to match a specified version of the language. Ello permite aislar la decisión de actualizar las herramientas de la decisión de actualizar las versiones de lenguaje.That enables you to separate the decision to upgrade tools from the decision to upgrade language versions.

C# 7.1 incorpora el elemento de configuración de selección de versión de lenguaje, tres nuevas características de lenguaje y un nuevo comportamiento del compilador.C# 7.1 adds the language version selection configuration element, three new language features and new compiler behavior.

Las nuevas características de lenguaje de esta versión son las siguientes:The new language features in this release are:

Por último, el compilador tiene dos opciones, /refout y /refonly, que controlan la generación de ensamblados de referencia.Finally, the compiler has two options /refout and /refonly that control reference assembly generation.

Para usar las características más recientes en una versión secundaria, tendrá que configurar la versión del idioma de compilador y seleccionar la versión.To use the latest features in a point release, you need to configure the compiler language version and select the version.

Async mainAsync main

Un método async main permite usar await en el método Main.An async main method enables you to use await in your Main method. Anteriormente, hubiera sido necesario escribir lo siguiente:Previously you would need to write:

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

Ahora se puede escribir esto: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();
}

Si el programa no devuelve un código de salida, puede declarar un método Main que devuelva una 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();
}

En el tema sobre async main de la guía de programación puede leer más detalles al respecto.You can read more about the details in the async main topic in the programming guide.

Expresiones literales predeterminadasDefault literal expressions

Las expresiones literales predeterminadas constituyen una mejora con respecto a las expresiones de valor predeterminadas.Default literal expressions are an enhancement to default value expressions. Estas expresiones inicializan una variable en el valor predeterminado.These expressions initialize a variable to the default value. Donde anteriormente habría que escribir:Where you previously would write:

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

Ahora, se puede pasar por alto el tipo del lado derecho de la inicialización:You can now omit the type on the right-hand side of the initialization:

Func<string, bool> whereClause = default;

Encontrará más información sobre esta mejora en el tema sobre las expresiones de valor predeterminadas de la guía de programación de C#.You can learn more about this enhancement in the C# Programming Guide topic on default value expressions.

Esta mejora cambia también algunas de las reglas de análisis de palabras claves predeterminadas.This enhancement also changes some of the parsing rules for the default keyword.

Nombres de elementos de tupla inferidosInferred tuple element names

Esta característica supone una pequeña mejora con respecto a la característica de tuplas incluida en C# 7.0.This feature is a small enhancement to the tuples feature introduced in C# 7.0. Muchas veces, cuando se inicializa una tupla, las variables usadas en el lado derecho de la asignación son las mismas que los nombres que querríamos dar a los 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);

Ahora, los nombres de los elementos de tupla se pueden deducir de las variables empleadas para inicializar la tupla en 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"

Encontrará más información sobre esta característica en el tema sobre tuplas.You can learn more about this feature in the Tuples topic.

Generación de ensamblados de referenciaReference assembly generation

Existen dos nuevas opciones del compilador con las que se generan ensamblados solo de referencia: /refout y /refonly.There are two new compiler options that generate reference-only assemblies: /refout and /refonly. En los temas de los vínculos se explican estas opciones y los ensamblados de referencia de manera más pormenorizada.The linked topics explain these options and reference assemblies in more detail.