Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
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.