Considere o seguinte código:
#nullable enable
class Foo
{
public string? Name { get; set; }
public bool HasName => Name != null;
public void NameToUpperCase()
{
if (HasName)
{
Name = Name.ToUpper();
}
}
}
No Name = Name.ToUpper (), recebo um aviso de que Name é uma possível referência nula, o que está claramente incorreto. Eu posso curar esse aviso inserindo HasName para que a condição seja if (Name! = Null).
Existe alguma maneira de instruir o compilador que uma resposta verdadeira de HasName implica uma restrição de não anulabilidade em Name?
Isso é importante porque o HasName pode realmente testar muito mais coisas, e eu posso querer usá-lo em vários locais, ou pode ser uma parte pública da superfície da API. Há muitas razões para querer incluir o cheque nulo em seu próprio método, mas fazer isso parece interromper o verificador de referência anulável.
#nullable disable
posteriormente #nullable enable
ou restore
novamente ( docs.microsoft.com/en-us/dotnet/csharp/… ).
!
operador "dammit" . if(HasName) { Name = Name!.ToUpper(); }
HasValue
em um tipo anulável, não compará-lonull
. Provavelmente não afeta o seu problema.