En este articulo voy a hablar de la validación nula de parámetros simplificados. Seguramente os habréis encontrado con un caso como el siguiente:
employee getEmployee(int32 employeeId) {
if (employeeId is null) {
throw new ArgumentNullException(nameof(employeeId));
}
...
}
En la versión 9.0 de C# podremos usar la siguiente sintaxis para abreviar el código anterior
employee getEmployee(int32 employeeId!){
...
}
Esta validación ha de cumplir las siguientes normas o reglas:
- Los argumentos que tengan esta validación se deberán establecer los primeros en la firma del método. Su validación se ejecutará en orden al orden de los argumentos.
- La validación se aplica únicamente al valor null.
- Esta forma de trabajar también se puede aplicar a los argumentos en un constructor. Si en dicho constructor se llama al constructor base, este se ejecutará antes que la validación.
- Si el argumento no puede ser nulo, esta validación provocará un error de compilación.
- Si el tipo es struct o unmanaged lanzaría la misma excepción que en el punto anterior, al no poder ser nulables.
- No se podrá establecer a un argumento de salida, ya que lanzará una excepción.
- Se mostrará una advertencia si el argumento tiene como valor por defecto nulo.
A continuación os muestro ejemplos de su uso:
void MethodName<T>(T argument!) { } -> Correcto
void MethodName<T>(T argument!) where T : struct { } -> Lanza un error
void MethodName<T>(T argument!) where T : unmanaged { } -> Lanza un error
void MethodName<T>(T argument!) where T : notnull { } -> Correcto
void MethodName<T>(T argument!) where T : class { } -> Correcto
void MethodName<T>(T argument!) where T : SomeStruct { } -> Lanza un error
void MethodName<T>(T argument!) where T : SomeClass { } -> Correcto
¡Espero os sea de ayuda!