Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Tip
Artikel ini adalah bagian dari bagian Dasar-Dasar untuk pengembang yang sudah mengetahui setidaknya satu bahasa pemrograman dan mempelajari C#. Jika Anda baru menggunakan pemrograman, mulailah dengan tutorial Memulai terlebih dahulu.
Berasal dari Java atau C++? C# menyediakan keamanan null pada waktu kompilasi melalui tipe referensi yang dapat bernilai null. Tujuannya mirip dengan anotasi @NonNull Java tetapi diberlakukan oleh kompilator. C# juga memiliki operator khusus seperti ?. dan ?? yang membuat ekspresi null-safe ringkas.
null mewakili tidak adanya nilai. Ketika Anda mencoba mengakses anggota pada referensi null, dengan memanggil metode atau membaca properti, runtime melempar: NullReferenceException
// Accessing a member on null throws NullReferenceException at runtime:
// string? name = null;
// int length = name.Length; // throws NullReferenceException
// Check before you dereference:
string? name = null;
if (name is not null)
{
Console.WriteLine($"Name has {name.Length} characters.");
}
else
{
Console.WriteLine("Name has no value.");
}
// Output: Name has no value.
C# memberi Anda tiga alat pelengkap untuk menulis kode null-safe:
-
Jenis Nilai Nullable: biarkan jenis nilai seperti
intataubooljuga memuatnull -
Jenis referensi yang dapat diubah ke null: biarkan pengkompilasi melacak apakah referensi mungkin
null - Operator null: memungkinkan akses null-safe dan logika fallback secara ringkas
Jenis nilai yang dapat diubah ke null
Jenis nilai seperti int, double, dan bool tidak dapat menampung null secara default. Tambahkan ? ke nama tipe untuk membuat tipe nilai nullable yang menyimpan nilai atau null:
int? score = null;
Console.WriteLine(score.HasValue); // False
score = 95;
Console.WriteLine(score.HasValue); // True
Console.WriteLine(score.GetValueOrDefault()); // 95
int? missing = null;
Console.WriteLine(missing.GetValueOrDefault(-1)); // -1
Jenis nilai dapat bernilai null berguna ketika tipe data dasar harus merepresentasikan "tidak ada data". Skenario umum termasuk kolom database yang mungkin tidak hadir, pengaturan konfigurasi opsional, dan pengambilan data sensor yang belum dilakukan.
Untuk cakupan lengkap deklarasi, pemeriksaan, dan konversi, lihat Jenis nilai yang dapat diubah ke null.
Jenis referensi yang bisa memiliki nilai null
Jenis referensi, seperti string, array, dan instans kelas, dapat menampung null pada runtime.
Tipe referensi nullable adalah fitur kompilator yang membuat maksud null menjadi eksplisit dan menangkap kesalahan pada waktu kompilasi.
Dengan menggunakan ? anotasi, Anda menyatakan niat Anda:
-
string?— referensi ini mungkinnull; pengkompilasi memperingatkan jika Anda mendereferensikannya tanpa memeriksa terlebih dahulu -
string— referensi ini seharusnya tidaknull; pengompiler akan memperingatkan jika Anda memberikannullkepadanya
// string? means this reference might be null
// string means this reference should not be null
string? nullableName = null;
string nonNullName = "Alice";
// ?. safely accesses a member when the reference might be null
string display = nullableName?.ToUpper() ?? "(no name)";
Console.WriteLine(display); // (no name)
display = nonNullName.ToUpper(); // safe: nonNullName is never null
Console.WriteLine(display); // ALICE
Semua proyek .NET yang dibuat oleh templat SDK modern akan mengaktifkan jenis referensi nullable secara default. Untuk panduan lengkap tentang mengaktifkan dan melakukan anotasi, lihat Jenis referensi nullable.
Operator null
C# mencakup beberapa operator yang memungkinkan Anda menulis kode null-safe tanpa pelindung null manual di mana-mana.
| Pengendali | Name | Kegunaan |
|---|---|---|
?. |
Pengaksesan anggota bersyarat null | Mengakses anggota hanya ketika objek bukan nol |
?[] |
Akses pengindeks kondisional-null | Akses elemen hanya jika koleksi tidak bernilai null |
?? |
Operator penggabungan null | Mengembalikan nilai fallback saat ekspresi null |
??= |
Penetapan penggabungan-null | Tetapkan hanya ketika variabel adalah null |
is null / is not null |
Pola kosong | Uji null yang diutamakan |
string? city = GetCity();
// ?. — access a member only when non-null
int? len = city?.Length;
// ?? — substitute a default when null
string display = city ?? "unknown";
// is null — preferred null test
if (city is null)
{
Console.WriteLine("No city provided.");
}
else
{
Console.WriteLine($"{display} ({len} chars)");
}
// Output: No city provided.
Untuk contoh terperinci dari setiap operator, lihat Operator null.
Jenis nilai nullable dan jenis referensi nullable memiliki fungsi berbeda
Jenis nilai nullable dan jenis referensi nullable bukan alternatif. Mereka memecahkan masalah yang berbeda:
- Gunakan
T?untuk jenis nilai yang perlu mewakili "tanpa nilai." Misalnya, gunakanint?untuk kolom database opsional atauDateTime?untuk peristiwa yang belum dijadwalkan. - Gunakan
string?dan anotasi referensi null lainnya untuk mendokumen bahwa referensi mungkinnull, sehingga pengompilasi dapat memperingatkan Anda sebelumNullReferenceExceptionterjadi pada runtime.
Bersama-sama, fitur-fitur ini dan operator null memberi Anda serangkaian alat lengkap untuk menulis kode C# null-safe.