Bueno pues en este video traigo las noveades que va a contener la nueva version C# 8
Índice
1 - Tipos de referencia nullables.
Uno de los grandes problemas de las aplicaciones de hoy en día es el control de cuando algo es null
o puede ser null
por lo que C#8 nos va a dar la posibilidad de no permitir tener valores null en nuestro código, para ello tenemos que activar debajo de los using la expresión #nulllable enable
La razón por la que hay que activarlo por fichero y no por proyecto es porque debido a todo el código antiguo que hay ya creado podría causar unos problemas enormes si fuera automático.
2 - Stream asíncronos
Todo el mundo conoce los streams tenemos un método que nos devuelve un IEnumerable<T>
a partir de ahora podemos devolver un IAsyncEnumerable<T>
, por supuesto este nuevo tipo tiene todas las características de Async
por lo que para operar con el tenemos que indicar todas las keywords necesarias, como await
o Task
.
Lee mas sobre programación asíncrona.
3 - Array slice
La nueva versión de C# nos permite indicar un subrango dentro de un array como vemos en el ejemplo:
string[] nombres = { "nombre1", "nombre2", "nombre3", "nombre4", "nombre5" };
foreach(string nombre in nombres[1..3]){
}
En este caso iterara del primer elemento al cercero.
otro ejemplo es el caracter ^
que indicara por el final por lo que si indicamos nombres[3...^1]
iterara desde el tercero hasta el penúltimo.
4 - patrones recursivos
Dicho de otro modo, patrones dentro de patrones, y aqui introducimos tambien a la nueva sentencia swich, donde podemos pasar mas de un parámetro como podemos ver a continuacion.
switch (p.firstname, p.middlename, p.lastname)
{
case(string f, string m, string l):
return $”{f}, {m[0]} {l}”;
case(string f, null, string l):
return $”{f}, {l}”;
.
. //resto de los casos
.
}
Como podemos observar la sentencia swich acaba siendo un churro enorme ya que la variedad de casos en total es de 9, pero con la nueva sentencia swich vemos que quedara más limpio.
return (p.firstname, p.middlename, p.lastname) switch
{
(string f, string m, string l) => $”{f}, {m[0]} {l}”;
(string f, null, string l) = > $”{f}, {l}”;
...//resto de los casos
}
Personalmente pienso que lucen mucho mejor ya que queda mas limpio y mucho mas facil de ver.
Como nota a destacar indicar que el compilador no deja que te saltes ninguna de las opciones, sabemos que en este ccaso son un total de 8 "cases" en el swich
, si pusieramos 7 el compilador se quejaría.
5 - creación de tipos implicitos
comunmente cuando creamos un array
de elementos tenemos que indicar cada uno de los elementos que va a contener el array
con new T
A partir de ahora ya no sera necesario seguir poniendo el tipo de dato, ya que esta referenciado cuando declaras el array:
Personas[] arrayPersonas = {
new (v1, v2, v3),
new (v1, v2, v5)
}
6 - Elementos por defecto en interfaces
En mi opinión esta es la nueva funcionalidad que mas cabe destacar de todas, ya que es un "game changing" completamente a como entendemos las interfaces a dia de hoy.
Imaginemonos que tenemos la siguiente estructura
public interface ITemario{
void Ejercicio1();
void Ejercicio2();
}
public class Temario1 : ITemario{
public void Ejercicio1(){}
}
public class Temario2 : ITemario{
public void Ejercicio1(){}
public void Ejercicio2(){}
}
Esta estrucutra como podemos ver nos dará un error ya que la clase Temario1 no contiene todos los métodos que incluye la interfaz.
Desde ahora en C#8 podemos hacer lo siguiente para evitar que esto sea un problema para el compilador:
public interface ITemario{
void Ejercicio1();
void Ejercicio2() => Console.WriteLine("Ejercicio no disponible");
}
Utilizando =>
hemos creado un valor por defecto dentro de la interfaz.