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.
Operator ?? null-coalescing mengembalikan nilai dari operand sebelah kiri jika operand tersebut tidak null; jika tidak, operator tersebut mengevaluasi operand sebelah kanan dan mengembalikan hasilnya. Operator ?? tidak mengevaluasi operand kanannya jika operand kiri bernilai non-null. Operator ??= penugasan null-coalescing mengatur nilai operand di sebelah kanannya ke operand di sebelah kirinya hanya jika operand di sebelah kiri bernilai null. Operator ??= tidak mengevaluasi operand kanannya jika operand kiri bernilai non-null.
List<int>? numbers = null;
int? a = null;
Console.WriteLine((numbers is null)); // expected: true
// if numbers is null, initialize it. Then, add 5 to numbers
(numbers ??= new List<int>()).Add(5);
Console.WriteLine(string.Join(" ", numbers)); // output: 5
Console.WriteLine((numbers is null)); // expected: false
Console.WriteLine((a is null)); // expected: true
Console.WriteLine((a ?? 3)); // expected: 3 since a is still null
// if a is null then assign 0 to a and add a to the list
numbers.Add(a ??= 0);
Console.WriteLine((a is null)); // expected: false
Console.WriteLine(string.Join(" ", numbers)); // output: 5 0
Console.WriteLine(a); // output: 0
Operand ??= di sebelah kiri operator harus berupa variabel, properti, atau elemen pengindeks.
Jenis operand di sebelah kiri operator ?? dan ??= tidak boleh berupa tipe nilai yang tidak dapat bernilai null. Secara khusus, Anda dapat menggunakan operator null-coalescing dengan parameter jenis yang tidak dibatasi:
private static void Display<T>(T a, T backup)
{
Console.WriteLine(a ?? backup);
}
Operator penggabung-null bersifat asosiatif ke kanan. Artinya, ekspresi dalam bentuk
a ?? b ?? c
d ??= e ??= f
dievaluasi sebagai
a ?? (b ?? c)
d ??= (e ??= f)
Contoh
Operator ?? dan ??= dapat berguna dalam skenario berikut:
Dalam ekspresi dengan operator
?.null-conditional dan?[], Anda dapat menggunakan??operator untuk memberikan ekspresi alternatif untuk dievaluasi jika hasil ekspresi dengan operasi null-conditional adalahnull:double SumNumbers(List<double[]> setsOfNumbers, int indexOfSetToSum) { return setsOfNumbers?[indexOfSetToSum]?.Sum() ?? double.NaN; } var sum = SumNumbers(null, 0); Console.WriteLine(sum); // output: NaNSaat Anda bekerja dengan jenis nilai nullable dan perlu memberikan nilai dari jenis nilai yang mendasar, gunakan
??operator untuk menentukan nilai yang akan diberikan jika nilai jenis nullable adalahnull:int? a = null; int b = a ?? -1; Console.WriteLine(b); // output: -1Gunakan metode Nullable<T>.GetValueOrDefault() jika nilai tipe nullable
nullharus menjadi nilai default dari tipe nilai yang mendasar.Anda dapat menggunakan
throwekspresi sebagai operand??kanan operator untuk membuat kode pemeriksaan argumen lebih ringkas:public string Name { get => name; set => name = value ?? throw new ArgumentNullException(nameof(value), "Name cannot be null"); }Contoh sebelumnya juga menunjukkan cara menggunakan anggota berwujud ekspresi untuk menentukan properti.
Anda dapat menggunakan
??=operator untuk mengganti kode formulirif (variable is null) { variable = expression; }dengan kode berikut:
variable ??= expression;
Kelebihan beban operator
Operator ?? dan ??= tidak dapat kelebihan beban.
Spesifikasi bahasa C#
Untuk informasi selengkapnya tentang ?? operator, lihat Bagian operator coalescing null dari spesifikasi bahasa C#.
Untuk informasi selengkapnya tentang ??= operator, lihat bagian Penetapan gabungan dari spesifikasi bahasa C#.