Analisis nullability tidak berjalan begitu saja; compiler perlu tahu di mana analisis itu aktif. Lingkup tersebut disebut nullable context. Template project .NET 9 sudah mengaktifkan konteks ini untuk seluruh project, sedangkan kode warisan biasanya dimulai dari konteks mati. Kita bisa menyetel cakupan analisis pada dua tingkat: project file untuk seluruh kode, dan direktif #nullable untuk satu berkas.

Properti Nullable pada Project File #

Template dotnet new console menghasilkan project file dengan analisis aktif. Bagian yang menentukan terlihat seperti berikut:

xml
<PropertyGroup>
  <Nullable>enable</Nullable>
</PropertyGroup>

Nilai properti Nullable yang tersedia dirangkum di bawah ini:

NilaiEfek
enableWarning nullability dan anotasi ? aktif
warningsHanya warning nullability; anotasi ? ditolak
annotationsHanya anotasi ? diizinkan; warning analisis mati
disableSeluruh analisis dan anotasi mati

Direktif #nullable per Berkas #

Saat migrasi kode lama, kita sering menonaktifkan analisis hanya untuk berkas tertentu. Direktif #nullable mengatur konteks mulai baris penulisan sampai akhir berkas atau direktif berikutnya. Direktif #nullable restore mengembalikan konteks ke setelan project, sehingga berkas tidak mengubah perilaku berkas lain.

Contoh: Mengganti Konteks di Tengah Berkas #

csharp
#nullable enable
string? catatan = null;

Console.WriteLine($"Sebelum diisi: {catatan ?? "(kosong)"}");

catatan = "Dikirim dari gudang Bandung";

#nullable disable
string catatanLama = null;
Console.WriteLine($"Konteks disable: {catatanLama ?? "(kosong)"}");

#nullable restore
Console.WriteLine($"Konteks kembali mengikuti project: {catatan}");

Output yang Dihasilkan:

text
Sebelum diisi: (kosong)
Konteks disable: (kosong)
Konteks kembali mengikuti project: Dikirim dari gudang Bandung

Mari kita bedah baris demi baris:

  1. #nullable enable: Konteks di dalam method diangkat ke analisis penuh, sehingga string? catatan sah dan dianalisis.
  2. catatan ?? "(kosong)": Titik baca diberi pengganti karena catatan masih kosong pada baris tersebut.
  3. #nullable disable lalu string catatanLama = null;: Penugasan null ke variabel non-nullable tidak memicu warning karena analisis sedang mati.
  4. #nullable restore: Konteks kembali mengikuti properti Nullable project, dan variabel catatan yang sudah terisi tetap dianalisis normal.

Warning Anotasi di Luar Konteks #

Anotasi string? yang ditulis saat konteks anotasi mati memicu warning berikut (path project dipangkas):

text
Program.cs(2,7): warning CS8632: The annotation for nullable reference types should only be used in code within a '#nullable' annotations context.

Pesan CS8632 muncul karena tanda tanya butuh konteks anotasi aktif. Solusinya mengangkat konteks dengan #nullable enable, menghapus anotasi, atau menyetel properti project ke enable.