عملگر (??) null Coalescing

عملگر null coalescing، یک عملگر باینری است که، برای تشخیص مقدار دو عملوند به کار می‌رود. کاربرد اصلی این عملگر در قرار دادن یک مقدار nullable در یک مقدار non-nullable با استفاده از یک دستورالعمل ساده‌ است. در زیر نحوه استفاده از عملگر null coalescing نشان داده شده است :

var result = operand1 ?? operand2;

operand1 و operand2 می‌توانند متغیر، فراخوانی یک متد و یا یک عبارت باشند. اگر operand1 یک متغیر با مقدار تهی باشد و یا فراخوانی یک متد و یا عبارتی باشد که یک مقدار تهی را تولید کند در این صورت عملگر null coalescing به سراغ مقدار عملوند operand2 می‌رود. اگر مقدار این عملوند غیر تهی باشد عملگر null coalescing از آن در نتیجه محاسبه استفاده می‌کند. به مثال زیر توجه کنید :

   1: public class Program
   2: {
   3:     public static void Main(string[] args)
   4:     {
   5:         int? num1 = null;
   6:         int? num2 = 100;
   7: 
   8:         int? num3 = num1 ?? num2;
   9: 
  10:         Console.WriteLine($"Value is {num3}");
  11:     }
  12: }
Value is 100

در خط 8 مثال بالا از عملگر null coalescing استفاده کرده‌ایم. از آنجاییکه مقدار اولیه num1 برابر null و مقدار num2 یک مقدار غیر تهی است، در نتیجه مقدار num2 در متغیر num3 قرار می‌گیرد.
در مثال زیر هم یک متد را فراخوانی می‌کنیم. البته به طور قطع نمی‌دانیم که آیا با فراخوانی آن یک مقدار تهی برگشت داده می‌شود و یا یک مقدار غیر تهی :

   1: using System;
   2: 
   3: namespace NullCoalescingOperator
   4: {
   5:     public class Program
   6:     {
   7:         public static void Main(string[] args)
   8:         {
   9:             Random randomizer = new Random();
  10: 
  11:             int? result = GetNullOrIntValue(randomizer.Next(1, 10)) ?? default(int);
  12:             
  13:             Console.WriteLine($"Result is {result}");
  14:         }
  15: 
  16:         public static int? GetNullOrIntValue(int randomValue)
  17:         {
  18:             if (randomValue % 2 == 0)
  19:             {
  20:                 return null;
  21:             }
  22: 
  23:             return 100;
  24:         }
  25:     }
  26: }
Result is 100
Result is 0

در مثال بالا یک متد به نام ()GetNullOrIntValue تعریف کرده‌ایم که یک مقدار تصادفی به عنوان آرگومان قبول می‌کند. این متد در صورتی که یک مقدار زوج به آن ارسال شود مقدار null و در غیر اینصورت مقدار 100 را بر می‌گرداند. وقتی که در خط 11 این متد را فراخوانی می‌کنیم، یک مقدار تصافی به عنوان آرگومان به آن ارسال می‌شود. عملوند دومی که برای عملگر null coalescing استفاده می‌کنیم کلمه کلیدی default است که برای تشخیص مقدار پیشفرض نوع int یعنی عدد صفر به کار برده شده است. اگر با فراخوانی متد به طور تصادفی یک مقدار زوج به آن ارسال شود، متد مقدار پیشفرض نوع int و در غیر اینصورت یک مقدار غیر تهی (یعنی 100) را بر می‌گرداند.