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

C# 8.0 ve sonraki birli sonek işleci ! null-forgiving veya null-suppression işlecidir. Null değere etkinleştirilmiş ekaçıklama bağlamında, bir başvuru türünün ifadesinin olmadığını bildiren null-forgiving x işleci null kullanırsınız: x! . 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 sonucu olarak x değerlendirilir.

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

Örnekler

Null bağışlayan işlecinin kullanım durumlarından biri bağımsız değişken doğrulama mantığını test etmektir. Örneğin, aşağıdaki sınıfı dikkate alalım:

#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ı üretir: Warning CS8625: Cannot convert null literal to non-nullable reference type . Null-bağışlayıcı işleci kullanarak, derleyiciye geçirmenin beklendiğini ve null uyarılmaması gerektiğini bildirersiniz.

Ayrıca, bir ifadenin o olmadığını ancak derleyicinin bunu tanıyamaz olduğunu tam olarak biliyorken null bağışlayan null işleci de kullanabilirsiniz. Aşağıdaki örnekte, yöntemi IsValid true döndürürse, bağımsız değişkeni değildir ve bunu güvenle null başvurudan çıkarabilirsiniz:

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 üretir: Warning CS8602: Dereference of a possibly null reference .

yönteminde değişiklik yapmak IsValid için NotNullWhen özniteliğini kullanarak derleyiciye yöntemin bağımsız değişkeninin döndürene kadar o olmadığını IsValid null true bildirebilirsiniz:

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 deyiminin içinde olmadığını bulmak için yeterli bilgiye sahip olduğundan null-forgiving işleci p null kullanmana gerek if yok. Bir değişkenin null durumu hakkında ek bilgi sağlamanızı sağlayan öznitelikler hakkında daha fazla bilgi için bkz. Null beklentileri tanımlamak için özniteliklerle API'leri yükseltme.

C# dili belirtimi

Daha fazla bilgi için null değere değiştirilebilir başvuru türleri belirtimlerinin taslağının null-forgiving işleci bölümüne bakın.

Ayrıca bkz.