C# 6 aparece en julio del 2015 junto con Visual studio 2015 con muchas mejoras significativas que vale la pena revisar y poner en practica
Inicializar propiedades automáticamente
Podemos después de crear un propiedad dentro de una clase asignar un valor, muy util por ejemplo para clases estáticas:
public string MyVar { get; set; } = "Hello World"; //Auto Property Initializer
Operador Null
Usando el símbolo la interrogación ? podemos peguntar si una propiedad es nula
DateTime? datetime = new DateTime(); var YearOfDate = datetime?.Year; //using ? asking if the value is null Console.WriteLine(YearOfDate); var YearOfDateConditional = datetime?.Year ?? 0; //using ? asking if the value is null and if the property Year is null returning 0
Interpolación de cadenas
Podemos fácilmente vincular variables dentro de un string así como también llamados a métodos
Console.WriteLine("----------------------String Interpolation -----------------"); var years = $"YearOfDate:{YearOfDate} - YearOfDateConditional:{YearOfDateConditional}"; //adding vars on the string easily Console.WriteLine(years);
Funciones y propiedades como expresiones
Con esta mejora podemos utilizar expresiones para representar el valor de una propiedad o también el cuerpo de un método:
public string MyVarExpresion => string.Format("Hello World at:{0}", DateTime.Now);
//Expression-Bodied Function public int Sum2Numbers(int x, int y) => (x + y);
using static
Using static permite colocar la referencia de una clase como estática para no tener que indicar el namespace de donde proviene en cada llamado
using static System.Console; // using static WriteLine("-----------------------------------------------------------");
Operador await en catch y finally
ya es posible utilizar el operador Await dentro de un bloque catch y finally
public async Task AnyMethod() { try { } catch (Exception) { await CatchMethod(); } } private async Task CatchMethod() { WriteLine("Exception occured"); }
Filtros o condiciones en excepciones
Ahora usando la clausula “when” podemos realizar un condicional o filtro de la declaración de una excepción por ejemplo:
catch (Exception ex) when (ex.Message.Contains("Something")) { await CatchMethod(); }
El mejor articulo que he leído para entender todas las mejoras se encuentra en esta pagina incluye algunos vídeos también:
http://www.sharepointcafe.net/2017/09/csharp-6-new-features.html
Todos los demos incluyendo C# 6, 7, 7.1 se encuentran en el siguiente repositorio:
https://github.com/Mteheran/CSharpVersionsDemos
Recuerda revisar también el articulo con las mejoras de 7.0, 7.1 y 7.2