Megosztás:


! (null-tűrő) operátor (C# hivatkozás)

Az unáris postfix ! operátor a null-toleráns vagy null-elnyomás operátor. Engedélyezett null értékű széljegyzetkörnyezetben a null-elbocsátó operátorral tiltsa le az előző kifejezés összes null értékű figyelmeztetését. A unary prefix ! operátor a logikai negációs operátor. A null-megengedő operátornak futásidőben nincs hatása. Ez csak a fordító statikus folyamatelemzését befolyásolja a kifejezés null állapotának módosításával. Futtatáskor a x! kifejezés a mögöttes x kifejezés eredményére értékelődik ki.

A null értékű referenciatípusok funkcióval kapcsolatos további információkért lásd : Null értékű referenciatípusok.

A C# nyelv referenciadokumentuma a C# nyelv legújabb kiadású verzióját ismerteti. Emellett a közelgő nyelvi kiadás nyilvános előzetes verziójú funkcióinak kezdeti dokumentációját is tartalmazza.

A dokumentáció azonosítja azokat a funkciókat, amelyeket először a nyelv utolsó három verziójában vagy az aktuális nyilvános előzetes verziókban vezetnek be.

Jótanács

Ha meg szeretné tudni, hogy mikor jelent meg először egy funkció a C#-ban, tekintse meg a C# nyelvi verzióelőzményeiről szóló cikket.

Példák

A null-megbocsátó operátor egyik használati esete az argumentumérvényesítési logika tesztelése. Vegyük például a következő osztályt:

#nullable enable
public class Person
{
    public Person(string name) => Name = name ?? throw new ArgumentNullException(nameof(name));

    public string Name { get; }
}

Az MSTest tesztelési keretrendszer használatával a konstruktorban az alábbi tesztet hozhatja létre az érvényesítési logikához:

[TestMethod, ExpectedException(typeof(ArgumentNullException))]
public void NullNameShouldThrowTest()
{
    var person = new Person(null!);
}

A null-elbocsátó operátor nélkül a fordító a következő figyelmeztetést generálja az előző kódhoz: Warning CS8625: Cannot convert null literal to non-nullable reference type. A null-megbocsátó operátor használatával tájékoztatja a fordítót arról, hogy az átadás null várható, és nem szabad figyelmeztetést generálnia.

Akkor is használhatja a null-megbocsátó operátort, ha biztosan tudja, hogy egy kifejezés nem lehet null , de a fordító ezt nem ismeri fel. A következő példában, ha a IsValid metódus visszaadja a true, akkor az argumentuma nem null, és biztonságosan dereferálhatja azt.

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;

A null-megbocsátó operátor nélkül a fordító a következő figyelmeztetést generálja a p.Name kódhoz: Warning CS8602: Dereference of a possibly null reference.

Ha módosíthatja a IsValid metódust, a NotNullWhen attribútummal tájékoztathatja a fordítót arról, hogy a IsValid metódus argumentuma nem lehet null , amikor a metódus visszatér 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;

Az előző példában nem kell null-megbocsátó operátort használnia, mert a fordító elegendő információval rendelkezik ahhoz, hogy megtudja, hogy p nem lehet null az if utasításban. Azokról az attribútumokról, amelyek lehetővé teszik a változó null állapotával kapcsolatos további információk megadását, tekintse meg az API-k frissítése attribútumokkal a null elvárások meghatározásához.

C# nyelvspecifikáció

További információ: A null-megbocsátó operátor szakasz a null értékű referenciatípusok specifikációjának vázlatában.

Lásd még