Considérez le code suivant:
#nullable enable
class Foo
{
public string? Name { get; set; }
public bool HasName => Name != null;
public void NameToUpperCase()
{
if (HasName)
{
Name = Name.ToUpper();
}
}
}
Sur Name = Name.ToUpper (), je reçois un avertissement indiquant que Name est une référence null possible, ce qui est clairement incorrect. Je peux remédier à cet avertissement en insérant HasName afin que la condition soit if (Name! = Null).
Existe-t-il un moyen de dire au compilateur qu'une vraie réponse de HasName implique une contrainte de non-nullité sur Name?
Ceci est important car HasName pourrait en fait tester beaucoup plus de choses, et je pourrais vouloir l'utiliser à plusieurs endroits, ou il pourrait être une partie publique de la surface de l'API. Il existe de nombreuses raisons de vouloir factoriser la vérification nulle dans sa propre méthode, mais cela semble casser le vérificateur de référence nullable.
#nullable disable
puis #nullable enable
ou restore
encore par la suite ( docs.microsoft.com/en-us/dotnet/csharp/... ).
!
opérateur "dammit" . if(HasName) { Name = Name!.ToUpper(); }
HasValue
sur un type nullable, ne pas le vérifiernull
. Cela n'affecte probablement pas votre problème.