Considere el siguiente código:
#nullable enable
class Foo
{
public string? Name { get; set; }
public bool HasName => Name != null;
public void NameToUpperCase()
{
if (HasName)
{
Name = Name.ToUpper();
}
}
}
En Name = Name.ToUpper () recibo una advertencia de que Name es una posible referencia nula, que es claramente incorrecta. Puedo curar esta advertencia al incluir HasName para que la condición sea if (Name! = Null).
¿Hay alguna forma de indicarle al compilador que una respuesta verdadera de HasName implica una restricción de nulabilidad en Name?
Esto es importante porque HasName en realidad podría probar muchas más cosas, y podría querer usarlo en varios lugares, o podría ser una parte pública de la superficie API. Hay muchas razones para querer incluir la verificación nula en su propio método, pero hacerlo parece romper el verificador de referencia anulable.
#nullable disable
luego #nullable enable
o restore
nuevamente ( docs.microsoft.com/en-us/dotnet/csharp/… ).
!
operador "maldita sea" . if(HasName) { Name = Name!.ToUpper(); }
HasValue
en un tipo anulable, no verificarlonull
. Sin embargo, probablemente no afecte tu problema.