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: NaN
Saat 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: -1
Gunakan metode Nullable<T>.GetValueOrDefault() jika nilai tipe nullable
null
harus menjadi nilai default dari tipe nilai yang mendasar.Anda dapat menggunakan
throw
ekspresi 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 catatan proposal fitur.