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 ?? , değilse nullsol tarafındaki işlenenin değerini 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.
C# dili başvuru belgesi, C# dilinin en son yayımlanan sürümünü gösterir. Ayrıca, yaklaşan dil sürümü için genel önizlemelerdeki özelliklere yönelik ilk belgeleri içerir.
Belgelerde ilk olarak dilin son üç sürümünde veya geçerli genel önizlemelerde sunulan tüm özellikler tanımlanır.
Tavsiye
Bir özelliğin C# dilinde ilk tanıtıldığı zamanları bulmak için C# dil sürümü geçmişi makalesine bakın.
?? 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 kullanışlıdır:
null koşullu işleçleri
?.ve?[]kullanan ifadelerde, null koşullu işlemlernulliçeren ifadenin sonucunun olup olmadığını değerlendirmek üzere alternatif bir ifade sağlamak için işlecini kullanın??: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 değer türleriyle çalıştığınızda ve temel alınan değer türünde bir değer sağlamanız gerektiğinde, null değer atanabilir bir değer ise belirtecek değeri
nullbelirtmek için işlecini kullanın??:int? a = null; int b = a ?? -1; Console.WriteLine(b); // output: -1Nullable<T>.GetValueOrDefault() Null değer atanabilir bir değer olduğunda kullanılacak değer temel değer türünün varsayılan değeriyse
nullyöntemini kullanın.Bağımsız değişken denetimi kodunu daha kısa hale getirmek için işlecin sağ işleneni
??olarak birthrowifade kullanın: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.
Aşağıdaki formun
??=kodunu değiştirmek için işlecini kullanın:if (variable is null) { variable = expression; }Aşağıdaki kodu kullanın:
variable ??= expression;
İşleç aşırı yüklenebilirliği
ve ??= işleçlerini ?? aşırı yükleyemezsiniz.
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.