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:
<PropertyGroup>
<Nullable>enable</Nullable>
</PropertyGroup>Nilai properti Nullable yang tersedia dirangkum di bawah ini:
| Nilai | Efek |
|---|---|
enable | Warning nullability dan anotasi ? aktif |
warnings | Hanya warning nullability; anotasi ? ditolak |
annotations | Hanya anotasi ? diizinkan; warning analisis mati |
disable | Seluruh 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 #
#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:
Sebelum diisi: (kosong)
Konteks disable: (kosong)
Konteks kembali mengikuti project: Dikirim dari gudang BandungMari kita bedah baris demi baris:
#nullable enable: Konteks di dalam method diangkat ke analisis penuh, sehinggastring? catatansah dan dianalisis.catatan ?? "(kosong)": Titik baca diberi pengganti karenacatatanmasih kosong pada baris tersebut.#nullable disablelalustring catatanLama = null;: Penugasannullke variabel non-nullable tidak memicu warning karena analisis sedang mati.#nullable restore: Konteks kembali mengikuti propertiNullableproject, dan variabelcatatanyang sudah terisi tetap dianalisis normal.
Warning Anotasi di Luar Konteks #
Anotasi string? yang ditulis saat konteks anotasi mati memicu warning berikut (path project dipangkas):
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.