Parámetros anulables y CallerMemberName
Dentro de nuestro curso de C# te mencionamos algunas características de C# 8. Debes recordar que C# y VB forman parte de .NET Core por lo que también te beneficiará tomar un curso de Visual Basic para dominar mejor estos lenguajes de programación.
Un patrón que la biblioteca de C# 8 usa mucho es CallerMemberName. Nombrado así por el atributo que usa, la idea básica es que agregue un parámetro opcional al final de un método. El compilador ve el CallerMemberName e implícitamente proporciona un valor para ese parámetro.
public override bool IsDefined([CallerMemberName] string propertyName = null)
En teoría, el propertyNameparameter podría establecerse explícitamente en nulo, pero se entiende que no se debe hacer eso y podrían ocurrir errores inesperados.
Al convertir este código a C# 8, uno puede tener la tentación de marcar el parámetro como anulable. Eso es engañoso porque el método en realidad no fue diseñado para manejar los nulos. En su lugar, debes reemplazar el nulo con una cadena vacía.
public override bool IsDefined([CallerMemberName] string propertyName = "")
¿Todavía necesito verificaciones de argumentos nulos?
Si estás construyendo una biblioteca para el consumo público (es decir, NuGet), entonces sí, todos los métodos públicos aún deben verificar los argumentos nulos. Es posible que las aplicaciones que consumen la biblioteca no estén utilizando necesariamente tipos de referencia anulables. De hecho, es posible que ni siquiera estén usando C# 8.
Si todo el código de tu aplicación utiliza tipos de referencia que admiten nulos, entonces la respuesta es "probablemente sí". Si bien, en teoría, no verás nulos inesperados, todavía pueden aparecer debido al código dinámico, a la reflexión o al uso indebido del operador que permite nulos (!). Espero que la mayoría de los proyectos se beneficien de esta función y deberían aplicarla en C# 8.
En próximas notas hablaremos más del tema. Por el momento te mencionamos que estamos trabajando en nuestro curso de MySQL.