?? Ve?? = işleçler (C# başvurusu)
Null-coalescing işleci, değilse sol işlenenin değerini döndürür; aksi takdirde, sağ işleneni değerlendirir ve ?? null sonucu döndürür. Sol işlenen null olmayan olarak değerlendirilirse işleç, sağ ?? işlenenini değerlendirmez.
C# 8.0 ve üzerinde kullanılabilir, null birikerek atama işleci sağ işlenenin değerini yalnızca sol işlenen olarak değerlendirilirse sol işlenene ??= null atar. Sol işlenen null olmayan olarak değerlendirilirse işleç, sağ ??= işlenenini değerlendirmez.
List<int> numbers = null;
int? a = null;
(numbers ??= new List<int>()).Add(5);
Console.WriteLine(string.Join(" ", numbers)); // output: 5
numbers.Add(a ??= 0);
Console.WriteLine(string.Join(" ", numbers)); // output: 5 0
Console.WriteLine(a); // output: 0
İşlecinin sol işleneni ??= bir değişken, özellik veya dizinöğesi olması gerekir.
C# 7.3 ve önceki sürümlerinde işlecinin sol işlenen türü bir başvuru türü veya null değer değer türü ?? olmalıdır. C# 8.0'dan itibaren bu gereksinim aşağıdakilerle değiştirilir: ve işleçlerinin sol işlenen türü null değere sahip olmayan bir değer ?? ??= türü olamaz. Özellikle, C# 8.0'dan başlayarak, kısıtlanmamış tür parametreleriyle null-coalescing işleçlerini kullanabilirsiniz:
private static void Display<T>(T a, T backup)
{
Console.WriteLine(a ?? backup);
}
Null-coalescing işleçleri, doğru bir şekilde irdeler. Diğer bir ifade, formun ifadeleridir
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, ifadenin null koşullu işlemlerle sonuçlansa değerlendirilecek alternatif bir ifade sağlamak için işleci
??nullkullanabilirsiniz:double SumNumbers(List<double[]> setsOfNumbers, int indexOfSetToSum) { return setsOfNumbers?[indexOfSetToSum]?.Sum() ?? double.NaN; } var sum = SumNumbers(null, 0); Console.WriteLine(sum); // output: NaNNull değere değiştirilebilir değer türleriyle birlikte çalışıyor ve temel alınan bir değer türünün değerini belirtmeniz gerekirken, null değere değiştirilebilir bir değer olduğunda sağlamak üzere değeri belirtmek için
??işlecinullkullanın:int? a = null; int b = a ?? -1; Console.WriteLine(b); // output: -1Null değere sahip bir değer, temel alınan değer türünün varsayılan değeri olduğunda kullanılacak Nullable<T>.GetValueOrDefault()
nulldeğer ise yöntemini kullanın.C# 7.0'dan itibaren,
throwbağımsız değişken denetleme kodunu daha kısa hale etmek için işlecinin sağ işleneni olarak bir??ifade 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 ifadeye göre sıralandırmış üyelerin nasıl kullanılagelmektedir.
C# 8.0'dan itibaren, formun kodunu
??=değiştirmek için işleci kullanabilirsinizif (variable is null) { variable = expression; }aşağıdaki kodla:
variable ??= expression;
İşleç aşırı yüklemesi
ve ?? ??= işleçleri aşırı yük olamaz.
C# dili belirtimi
işleci hakkında daha fazla ?? bilgi için C# dil belirtimlerinin Null birikmesi işleci bölümüne bakın.
işleci hakkında daha fazla ??= bilgi için özellik teklifi notuna bakın.