Betrachten Sie den folgenden Code:
#nullable enable
class Foo
{
public string? Name { get; set; }
public bool HasName => Name != null;
public void NameToUpperCase()
{
if (HasName)
{
Name = Name.ToUpper();
}
}
}
Auf dem Namen = Name.ToUpper () erhalte ich eine Warnung, dass Name eine mögliche Nullreferenz ist, was eindeutig falsch ist. Ich kann diese Warnung beheben, indem ich HasName einfüge, sodass die Bedingung if (Name! = Null) lautet.
Kann ich den Compiler auf irgendeine Weise anweisen, dass eine echte Antwort von HasName eine Nicht-Nullfähigkeitsbeschränkung für Name impliziert?
Dies ist wichtig, da HasName möglicherweise viel mehr Dinge testet und ich es möglicherweise an mehreren Stellen verwenden möchte oder es ein öffentlicher Teil der API-Oberfläche ist. Es gibt viele Gründe, die Nullprüfung in ihre eigene Methode einbeziehen zu wollen, aber dies scheint die nullbare Referenzprüfung zu beschädigen.
#nullable disable
dann #nullable enable
oder restore
danach erneut umschließen ( docs.microsoft.com/en-us/dotnet/csharp/… ).
!
Operator "verdammt" verwenden . if(HasName) { Name = Name!.ToUpper(); }
HasValue
für einen nullbaren Typ verwenden, nicht dagegen prüfennull
. Es hat jedoch wahrscheinlich keinen Einfluss auf Ihr Problem.