انواع تهی

می‌توانید انواع ساده‌ای مانند int و double ایجاد کنید که مقادیر آنها تهی (null) باشد. مقادیر تهی فقط قابلیت ذخیره سازی انواع مرجع مانند رشته‌ها و سایر اشیاء را دارند. سی شارپ به شما اجازه می‌دهد انواع مقداری را تغییر دهید به طوریکه بتوانند به عنوان انواع تهی به کار روند. می‌توانید از System.Nullable<T> استفاده کنید که در آن T نوعی است که به انواع تهی تبدیل می‌شود.

Nullable<int> nullInt = null; 
Nullable<double> nullDouble = null;

همچنین می‌توانید به نوع علامت? را نیز اضافه کنید.

int? nullInt = null;
double? nullDouble = null;

با استفاده از کد زیر می‌توانید تست کنید که آیا متغیر دارای مقدار تهی می‌باشد یا نه؟

if (nullInt == null)
{
}

if (nullDouble.HasValue)
{
}

از آنجاییکه ما آنها را به انواع تهی تبدیل کرده‌ایم نمی‌توان آنها را در یک متغیر از انواع غیر تهی ذخیره نمود. مثلاً کد زیر مجاز نیست :

int? nullInt = null;
int myNumber = nullInt;

برای این کار لازم است که ابتدا آنها را به حالت اصلی برگردانید :

int myNumber = (int)nullInt;

اگر بخواهید یک نوع تهی با یک مقدار تهی را به حالت اولیه تبدیل کنید یک استثناء روی می‌دهد. وقتی دو نوع تهی (به استثنای نوع بولی ؟) را در یک عملیات در گیر می‌کنیم، اگر یکی از عملوندها تهی باشد نتیجه تهی خواهد بود. نتایج ممکن برای نوع بولی ؟ در جدول زیر آمده است :

var1 var2 var1 & var2 var1 | var2
true null null true
false null false null
null true null true
null false false null
null null null null

اگر شما بخواهید از null شدن نتیجه یک عبارت در صورتی که یکی از عملوندهای آن عبارت null باشد جلوگیری کنید، باید از عملگر ؟؟ استفاده کنید.

int? nullInt = null;
int number = nullInt * 5 ?? 10;

خط دوم نحوه‌ی استفاده از این عملگر را توضیح می‌دهد. برای نوشتن عبارتی معادل کد بالا از یک عملگر 3 تایی به صورت زیر استفاده می‌کنیم.

int number = (nullInt * 5) == null ? (nullInt * 5) : 10;

اگر نتیجه عبارت در سمت چپ عملگر ؟؟ برابر null باشد نتیجه عبارت سمت راست عملگر و در غیر این صورت نتیجه مقدار سمت چپ عملگر در متغیر number ذخیره می‌شود