Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
De unaire postfix-operator ! is de null-vergevende of null-onderdrukkende operator. Gebruik in een ingeschakelde context voor null-aantekening de operator null-forgiving om alle null-waarschuwingen voor de voorgaande expressie te onderdrukken. De unaire voorvoegseloperator ! is de logische negatieoperator. De operator null-forgiving heeft geen effect tijdens runtime. Dit is alleen van invloed op de statische stroomanalyse van de compiler door de null-status van de expressie te wijzigen. Tijdens runtime wordt de expressie x! geëvalueerd naar het resultaat van de onderliggende expressie x.
Zie Null-referentietypen voor meer informatie over de functie voor null-verwijzingstypen.
De C#-taalreferentiedocumenten beschrijven de meest recent uitgebrachte versie van de C#-taal. Het bevat ook de eerste documentatie voor functies in openbare previews voor de aanstaande taalrelease.
De documentatie identificeert alle functies die voor het eerst zijn geïntroduceerd in de laatste drie versies van de taal of in de huidige openbare previews.
Aanbeveling
Raadpleeg het artikel over de versiegeschiedenis van de C#-taal om te achterhalen wanneer een functie voor het eerst is geïntroduceerd in C#.
Voorbeelden
Een use-case voor de operator null-forgiving is het testen van de argumentvalidatielogica. Denk bijvoorbeeld aan de volgende klasse:
#nullable enable
public class Person
{
public Person(string name) => Name = name ?? throw new ArgumentNullException(nameof(name));
public string Name { get; }
}
Met behulp van het MSTest-testframework kunt u de volgende test maken voor de validatielogica in de constructor:
[TestMethod, ExpectedException(typeof(ArgumentNullException))]
public void NullNameShouldThrowTest()
{
var person = new Person(null!);
}
Zonder de operator null-forgiving genereert de compiler de volgende waarschuwing voor de voorgaande code: Warning CS8625: Cannot convert null literal to non-nullable reference type Met behulp van de operator null-forgiving geeft u aan dat null de compiler wordt verwacht en dat er geen waarschuwing moet worden gegenereerd.
U kunt ook de operator null-forgiving gebruiken wanneer u zeker weet dat een expressie niet kan zijn null , maar dat wordt niet herkend door de compiler. In het volgende voorbeeld, als de IsValid methode true retourneert, is het argument niet null en kunt u het veilig derefereren.
public static void Main()
{
Person? p = Find("John");
if (IsValid(p))
{
Console.WriteLine($"Found {p!.Name}");
}
}
public static bool IsValid(Person? person)
=> person is not null && person.Name is not null;
Zonder de operator null-forgiving genereert de compiler de volgende waarschuwing voor de p.Name code: Warning CS8602: Dereference of a possibly null reference
Als u de IsValid methode kunt wijzigen, kunt u het kenmerk NotNullWhen gebruiken om de compiler te informeren dat een argument van de IsValid methode niet kan zijn null wanneer de methode retourneert true:
public static void Main()
{
Person? p = Find("John");
if (IsValid(p))
{
Console.WriteLine($"Found {p.Name}");
}
}
public static bool IsValid([NotNullWhen(true)] Person? person)
=> person is not null && person.Name is not null;
In het voorgaande voorbeeld hoeft u de null-vergevingsgezinde operator niet te gebruiken, omdat de compiler voldoende informatie heeft om vast te stellen dat p niet null kan zijn binnen de if-instructie. Zie Upgrade-API's met kenmerken om null-verwachtingen te definiëren voor meer informatie over de null-status van een variabele.
C#-taalspecificatie
Voor meer informatie, zie de sectie null-forgiving-operator van het concept van de specificatie voor null-referentietypen.