Considera il seguente codice:
#nullable enable
class Foo
{
public string? Name { get; set; }
public bool HasName => Name != null;
public void NameToUpperCase()
{
if (HasName)
{
Name = Name.ToUpper();
}
}
}
Su Name = Name.ToUpper () ricevo un avviso che Name è un possibile riferimento null, che è chiaramente errato. Posso curare questo avviso integrando HasName quindi la condizione è if (Name! = Null).
Esiste un modo per indicare al compilatore che una risposta vera da HasName implica un vincolo di non annullabilità su Name?
Questo è importante perché HasName potrebbe effettivamente testare molte più cose e potrei volerlo usare in diversi punti, o potrebbe essere una parte pubblica della superficie dell'API. Ci sono molte ragioni per voler fattorizzare il controllo null nel suo metodo, ma farlo sembra infrangere il controllo di riferimento nullable.
#nullable disable
poi #nullable enable
o restore
ancora dopo ( docs.microsoft.com/en-us/dotnet/csharp/… ).
!
operatore "dammit" . if(HasName) { Name = Name!.ToUpper(); }
HasValue
su un tipo nullable, non verificarlonull
. Tuttavia, probabilmente non influisce sul problema.