! (null-forgiving) işleci (C# başvurusu)

Birli sonek ! işleci null-forgiving veya null-suppression işlecidir. Etkin bir null atanabilir ek açıklama bağlamında, önceki ifade için tüm null atanabilir uyarıları engellemek için null-forgiving işlecini kullanırsınız. Birli ön ek ! işleci mantıksal olumsuzlama işlecidir. Null-forgiving işlecinin çalışma zamanında hiçbir etkisi yoktur. Yalnızca ifadenin null durumunu değiştirerek derleyicinin statik akış analizini etkiler. Çalışma zamanında ifade x! , temel alınan ifadenin xsonucunu değerlendirir.

Null atanabilir başvuru türleri özelliği hakkında daha fazla bilgi için bkz . Null atanabilir başvuru türleri.

Örnekler

Null-forgiving işlecinin kullanım örneklerinden biri, bağımsız değişken doğrulama mantığını test etme işlemidir. Örneğin, aşağıdaki sınıfı göz önünde bulundurun:

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

    public string Name { get; }
}

MSTest test çerçevesini kullanarak oluşturucuda doğrulama mantığı için aşağıdaki testi oluşturabilirsiniz:

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

Null-forgiving işleci olmadan, derleyici önceki kod için aşağıdaki uyarıyı oluşturur: Warning CS8625: Cannot convert null literal to non-nullable reference type. null-forgiving işlecini kullanarak, derleyiciye geçişin null beklendiğini ve hakkında uyarı verilmemesi gerektiğini bildirirsiniz.

İfadenin mümkün olmadığını null ancak derleyicinin bunu tanımayı yönetmediğini kesinlikle bildiğinizde null-forgiving işlecini de kullanabilirsiniz. Aşağıdaki örnekte, yöntem döndürürse IsValidtruebağımsız değişkeni değildir null ve güvenle başvurusunu kaldırabilirsiniz:

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;

Null-forgiving işleci olmadan, derleyici kod için aşağıdaki uyarıyı p.Name oluşturur: Warning CS8602: Dereference of a possibly null reference.

yöntemini değiştirebiliyorsanızIsValid, derleyiciye yöntemin bağımsız değişkeninin IsValid yöntemi döndürdüğünde truebulunamadığını null bildirmek için NotNullWhen özniteliğini kullanabilirsiniz:

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;

Yukarıdaki örnekte, derleyici deyimi içinde bulunamıyor null bulmak için p yeterli bilgiye sahip olduğundan null-forgiving işlecini if kullanmanız gerekmez. Bir değişkenin null durumu hakkında ek bilgi sağlamanıza olanak sağlayan öznitelikler hakkında daha fazla bilgi için bkz . Null beklentileri tanımlamak için API'leri özniteliklerle yükseltme.

C# dili belirtimi

Daha fazla bilgi için null atanabilir başvuru türleri belirtiminin taslağındaki null-forgiving işleci bölümüne bakın.

Ayrıca bkz.