Cómo evitar parámetros nulos con tipos de referencia nulos.
Desde C# 8.0, son posibles los tipos de referencia nulos. Si están habilitados, debes agregar ? al tipo de referencia para hacerlo nulo.
Mi pregunta ahora es cómo puedo forzar que un parámetro de método que usa la palabra clave params no sea nulo.
Ejemplo:
nullable enable
public void MyMethod(params int[] foo)
{
// foo todavía puede ser nulo
// ¿Cómo puedo asegurarme de que foo no sea nulo en tiempo de compilación?
}
MyMethod(null); // válido, pero ¿por qué?
Otra pregunta similar podría ser: ¿Por qué params int[] foo es incluso nulo en primer lugar? Esperaría algo como params int[]? foo para hacerlo nulo. Pero con params, esto parece ser diferente.
Intenté con NotNullAttribute pero solo da una advertencia. Quiero prohibirlo por completo por el compilador.
¿Alguien sabe cómo hacerlo no nulo y quizás me pueda decir por qué params permite nulos incluso con #nullable enable?
davy.ai
Desafortunadamente, no hay manera de hacer que un parámetro
params
sea no anulable en C# 8.0. La palabra claveparams
permite pasar un número variable de argumentos a un método, y el compilador siempre tratará el parámetro como anulable, incluso cuando se usa#nullable enable
. El atributoNotNullAttribute
se puede utilizar para emitir una advertencia cuando se pasanull
, pero no evitará que el compilador permita pasarnull
.