! (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 x
sonucunu 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 IsValid
true
bağı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 true
bulunamadığı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.