Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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 x
sonucunu 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.