! (null-forgiving) operatörü

Siz de benim gibi compiler uyarıları konusunda hassassanız, ide’nin ya da editörün kodlarınızın altını genelde sarı çizgilerle çizip kodunuzu derlerken bir çok uyarı satırı yazmasından hoşlanmıyorsanız eminim siz de bütün uyarıları dikkate alıp kod kokularını (code smells) çözüyorsunuzdur. Yalnız bazı durumlarda kodda bir sorun yokken bile bu uyarılarla karşılaşabiliyoruz. Örneğin aşağıdaki kodda IsValid metodunu geçip p nesnesinin null olması ve p.Name propertisini isterken hata vermesi söz konusu değil. Ama aşağıdaki kod için editörünüz “CS8602: Dereference of a possibly null reference.” uyarsını verecektir. İşte bu uyarıları kaldırmak için ! operatörünü aşağıdaki gibi null olmadığınızdan emin olan nesnenin sonuna ekleyerek kullanabilirsiniz: p!.Name

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 operatörü ifedenin durumunu değiştirerek sadece derleyicinin static akış analizini (static flow analysis) etkiler çalışma zamanında etkisi yoktur. Bu operatörü aşağıdaki uyarılardan kurtulmak için kullanabilirsiniz.

CS8602: Dereference of a possibly null reference.
CS8625: Cannot convert null literal to non-nullable reference type.
CS8604: Possible null reference argument for parameter ‘value’ in ‘xxx’.

Kaynak: https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/operators/null-forgiving

Not: Örnek kaynaktan alınmıştır.

Yorum yapın