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 mengetahui setidaknya satu bahasa pemrograman dan mempelajari C#. Jika Anda baru menggunakan pemrograman, mulailah dengan tutorial Memulai terlebih dahulu. Untuk detail selengkapnya, lihat Tipe nilai dapat bernilai null dalam referensi bahasa.
Jenis nilai yang dapat bernilai nullT? mewakili semua nilai dari jenis nilai dasarnyaT, ditambah nilai tambahannull. Variabel jenis int? menyimpan bilangan bulat apa pun atau null untuk mewakili "tanpa nilai."
Jenis nilai seperti int, bool, dan DateTime tidak dapat menyimpan null secara default. Perilaku ini efisien dan mencegah banyak kesalahan. Namun, batasan ini menciptakan masalah ketika nilai mungkin benar-benar tidak ada. Skenario umum adalah membaca dari database: kolom bilangan bulat mungkin berisi angka, atau mungkin tidak berisi nilai sama sekali (NULL di SQL). Polos int tidak bisa mewakili ketidakhadiran itu, tapi int? bisa.
Mendeklarasikan nilai jenis yang dapat di-null-kan
Tambahkan ? ke jenis nilai apa pun untuk membuatnya nullable:
int? age = null; // integer with no value yet
double? price = 9.99; // nullable double with a value
bool? isActive = null; // boolean with no value
age = 30; // assign a value later
int?[] scores = [100, null, 85, null, 72]; // array with absent entries
Nilai default dari tipe nilai nullable adalah null, bukan default tipe dasarnya.
Periksa apakah ada nilai
Cara yang disarankan untuk memeriksa jenis nilai nullable dan mengekstrak nilainya adalah dengan pola jenis:
int? temperature = 72;
if (temperature is int degrees)
{
Console.WriteLine($"Temperature is {degrees}°F.");
}
else
{
Console.WriteLine("Temperature is not recorded.");
}
// Output: Temperature is 72°F.
Pola is int degrees hanya cocok ketika temperature non-null, dan secara bersamaan mengikat nilai ke degrees. Anda mendapatkan pemeriksaan null sekaligus ekstraksi nilai dalam satu langkah.
Atau gunakan properti HasValue dan Value.
int? count = 42;
if (count.HasValue)
{
Console.WriteLine($"Count is {count.Value}.");
}
else
{
Console.WriteLine("Count has no value.");
}
// Output: Count is 42.
Lebih suka pola is T value untuk kode baru. Ini memperkenalkan variabel baru yang tidak dapat diubah ke cabang yang cocok, yang membuat niat lebih jelas dan menghilangkan godaan untuk secara tidak sengaja menggunakan Value di luar pemeriksaan null, di mana itu akan melemparkan InvalidOperationException.
Anda juga dapat membandingkan secara langsung dengan null:
int? quantity = null;
if (quantity != null)
{
Console.WriteLine($"Quantity: {quantity.Value}");
}
else
{
Console.WriteLine("Quantity is not set.");
}
// Output: Quantity is not set.
Mendapatkan nilai dengan fallback
Saat Anda memerlukan nilai yang tidak dapat diubah ke null dari operator nullable, gunakan GetValueOrDefault atau null-coalescing ?? :
int? rating = null;
int result1 = rating.GetValueOrDefault(); // 0 (default for int)
int result2 = rating.GetValueOrDefault(-1); // -1 (specified fallback)
Console.WriteLine(result1); // 0
Console.WriteLine(result2); // -1
rating = 5;
int result3 = rating.GetValueOrDefault(-1); // 5 (actual value)
Console.WriteLine(result3); // 5
Operator ?? sering kali lebih bersih sebaris:
int? priority = null;
int effective = priority ?? 0; // 0 because priority is null
Console.WriteLine(effective); // 0
priority = 3;
effective = priority ?? 0; // 3 because priority has a value
Console.WriteLine(effective); // 3
Kedua pendekatan mengembalikan nilai sesungguhnya ketika ada, dan fallback yang Anda tetapkan ketika nilai tersebut tidak tersedia.
Aritmatika dengan tipe nilai nullable
Operator aritmetika dan perbandingan pada jenis nilai nullable diangkat menjadi: ketika salah satu operand adalah null, hasilnya null dan bukan menghasilkan kesalahan.
int? a = 10;
int? b = 20;
int? c = null;
int? sum = a + b; // both non-null: result is 30
int? product = a * c; // one operand is null: result is null
Console.WriteLine(sum); // 30
Console.WriteLine(product.HasValue); // False — null propagates through arithmetic
Null disebarkan melalui aritmatika secara default. Untuk mencegah hasil null menyebar lebih lanjut, ekstrak nilai dengan ?? atau GetValueOrDefault sebelum digunakan dalam perhitungan.