Validación nula de parámetros

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!