Aracılığıyla paylaş


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

Unary sonek ! işleci null-affedici veya null baskılama 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. Ünary ön ek ! operatörü, mantıksal olumsuzlama operatörüdür. 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.

Daha fazla bilgi için "Null atanabilir başvuru türleri" özelliğine bakın: 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 null değeri geçmenin beklendiğini ve uyarı verilmemesi gerektiğini bildirirsiniz.

Bu ifadenin `null` olamayacağını kesinlikle bildiğiniz ancak derleyici bunu algılayamıyorsa null-forgiving işlecini de kullanabilirsiniz. Aşağıdaki örnekte, IsValid yöntemi true döndürürse, bu yöntemin bağımsız değişkeni null değildir ve onu güvenle derefreans edebilirsiniz.

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.

Eğer IsValid metodunu değiştirebiliyorsanız, NotNullWhen özelliğini kullanarak derleyiciye IsValid metodunun döndüğünde bağımsız değişkenin null olamayacağını 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, derleyicinin p'in if deyimi içinde null olamayacağını bilmesi için yeterli bilgiye sahip olmasından dolayı, null-forgiving işlecini 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-forgiving işleci bölümüne, null atanabilir başvuru türleri belirtiminin taslağındaki bakın.

Ayrıca bkz.