Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Null birleşim işleci ?? sol işlenenin değeri null değilse o değeri döndürür; aksi takdirde sağ işleneni değerlendirir ve sonucunu döndürür. Eğer sol operand null değilse, ?? operatörü sağ operandı kontrol etmez. Null birleşim atama işleci ??= , sağ işleneninin değerini yalnızca soldaki işlenen olarak değerlendirilirse sol işlenenine nullatar. Eğer sol operand null değilse, ??= operatörü sağ operandı kontrol etmez.
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
İşlecin sol işleneni ??= bir değişken, özellik veya dizin oluşturucu öğesi olmalıdır.
?? ve ??= işleçlerinin sol taraftaki işlenenin türü null atanamaz bir değer türü olamaz. Özellikle null birleşim işleçlerini kısıtlanmamış tür parametreleriyle kullanabilirsiniz:
private static void Display<T>(T a, T backup)
{
Console.WriteLine(a ?? backup);
}
Null birleşim işleçleri doğru ilişkilendirilir. Yani, formun ifadeleri
a ?? b ?? c
d ??= e ??= f
olarak değerlendirilir
a ?? (b ?? c)
d ??= (e ??= f)
Örnekler
?? ve ??= işleçleri aşağıdaki senaryolarda yararlı olabilir:
null-koşullu işleçleri
?.ve?[]olan ifadelerde, null koşullu işlemler??içeren ifadenin sonucunun olması durumunda değerlendirilecek alternatif bir ifade sağlamak için işlecini kullanabilirsiniznull:double SumNumbers(List<double[]> setsOfNumbers, int indexOfSetToSum) { return setsOfNumbers?[indexOfSetToSum]?.Sum() ?? double.NaN; } var sum = SumNumbers(null, 0); Console.WriteLine(sum); // output: NaNBoş değer atanabilir türlerle çalıştığınızda ve bir temel değer türü değeri sağlamanız gerektiğinde, boş atanabilir türün değeri
??ise belirli bir değer sağlamak içinnullişleci kullanın:int? a = null; int b = a ?? -1; Console.WriteLine(b); // output: -1Nullable<T>.GetValueOrDefault() yöntemini, null bir tür değeri
nullolduğunda temel değer türünün varsayılan değeri kullanılacaksa kullanın.Bir
throwifadeyi, bağımsız değişken denetimi kodunu daha kısa hale getirmek için??işlecin sağ işleneni olarak kullanabilirsiniz:public string Name { get => name; set => name = value ?? throw new ArgumentNullException(nameof(value), "Name cannot be null"); }Yukarıdaki örnekte, bir özelliği tanımlamak için ifade gövdeli üyelerin nasıl kullanılacağı da gösterilmektedir.
formun
??=kodunu değiştirmek için işlecini kullanabilirsinizif (variable is null) { variable = expression; }aşağıdaki kodu kullanarak
variable ??= expression;
İşleç aşırı yüklenebilirliği
İşleçler ?? ve ??= aşırı yüklenemez.
C# dil belirtimi
işleci hakkında ?? daha fazla bilgi için C# dil belirtimininnull birleşim işleci bölümüne bakın.
işleç hakkında ??= daha fazla bilgi için C# dil belirtiminin Bileşik atama bölümüne bakın.