کلاسهای Nullable و نوع داده Nullable در #C
در #C، نوع دادههای Nullable به شما این امکان را میدهند که برای انواع دادهای که معمولاً نمیتوانند مقدار null را ذخیره کنند (مانند انواع عددی و منطقی)، مقدار null را نیز در نظر بگیرید. این ویژگی مفید است به خصوص در مواقعی که میخواهید یک نوع داده را بهطور خاص از مقدار null متمایز کنید (برای مثال در پایگاههای داده که ممکن است برخی از فیلدها خالی باشند).
1. نوع داده Nullable در #C
در #C، تمام انواع دادهی اولیه (مثل int, double, bool و غیره) نمیتوانند مقدار null را نگه دارند. اما میتوانیم به کمک علامت ?، این امکان را فراهم کنیم که این انواع نیز بتوانند مقدار null را ذخیره کنند.
ساختار نوع داده Nullable
برای اینکه یک نوع داده را nullable کنید، کافی است از علامت ? بعد از نوع داده استفاده کنید.
double? y = 3.14; // double نوعی دیگر از داده است که میتواند null باشد
bool? isActive = null; // boolean نوعی است که میتواند null باشد
مثال استفاده از نوع داده Nullable
class Program
{
static void Main()
{
// تعریف متغیرهای nullable
int? age = null; // مقدار null برای age
double? price = 100.5; // مقدار عددی
bool? isAvailable = null; // مقدار null برای isAvailable
// چک کردن اینکه آیا مقدار null است
if (age.HasValue)
{
Console.WriteLine("Age: " + age.Value); // اگر مقدار داشت، آن را نمایش میدهیم
}
else
{
Console.WriteLine("Age is null.");
}
// استفاده از مقدار nullable
Console.WriteLine("Price: " + price ?? 0); // اگر price null باشد، 0 نمایش داده میشود
}
}
خروجی:
Price: 100.5
ویژگیهای Nullable
- HasValue: مشخص میکند که آیا متغیر null است یا خیر.
- Value: به شما این امکان را میدهد که مقدار واقعی متغیر را به دست آورید (فقط زمانی که HasValue برابر با true باشد).
عملیاتهای رایج با Nullable
-
Null-Coalescing Operator (??): این عملگر به شما این امکان را میدهد که اگر مقدار nullable برابر با null باشد، یک مقدار پیشفرض اختصاص دهید.
int? a = null;
int b = a ?? 10; // اگر a برابر null باشد، b برابر 10 میشود
2. کلاسهای Nullable در #C
در #C، Nullable<T> یک ساختار (struct) است که توسط خود زبان #C فراهم میشود و به شما این امکان را میدهد که یک نوع داده عمومی (generic type) را nullable کنید. از آنجا که T در Nullable<T> یک نوع داده جنریک است، میتوانید هر نوع دادهای را nullable کنید.
ساختار Nullable
در واقع، وقتی از int? یا double? استفاده میکنید، این همان <Nullable<int و <Nullable<double است. بنابراین، int? و <Nullable<int به طور یکسان رفتار میکنند.
class Program
{
static void Main()
{
// استفاده از Nullable<T> برای عدد صحیح
Nullable<int> x = null; // این معادل با int? است
Nullable<int> y = 5;
// بررسی اینکه آیا مقدار null است
if (x.HasValue)
{
Console.WriteLine("x has value: " + x.Value);
}
else
{
Console.WriteLine("x is null");
}
// دسترسی به مقدار
Console.WriteLine("y value: " + y.Value);
}
}
خروجی:
y value: 5
3. مزایای استفاده از Nullable و Nullable
- انعطافپذیری بیشتر: برای نگهداری مقادیر عددی که ممکن است گاهی null باشند (مثل دادههایی که از پایگاههای داده گرفته میشوند)، میتوانید از نوع دادههای nullable استفاده کنید.
- مناسب برای دادههای Missing یا Unknown: زمانی که یک مقدار برای یک فیلد یا ویژگی ناشناخته یا گم شده است، میتوانید از null برای نمایش آن استفاده کنید.
- امنیت نوع: با استفاده از Nullable<T>، میتوانید به راحتی بررسی کنید که آیا مقدار داده شده موجود است یا خیر (با استفاده از HasValue).
4. تفاوت بین نوع داده Nullable و نوع داده معمولی
- نوع داده معمولی: نمیتواند null باشد. برای مثال، int نمیتواند مقداری به جز یک عدد صحیح (مانند 5 یا 0) داشته باشد.
- نوع داده Nullable: میتواند یا یک مقدار از نوع خود را داشته باشد، یا null باشد. برای مثال، int? میتواند مقداری مانند 5 یا null داشته باشد.
5. تبدیل نوع و Nullable
در صورتی که مقدار nullable برابر null باشد، ممکن است نتوانید آن را به نوع دیگر تبدیل کنید. بنابراین، باید با دقت مقدارهای nullable را مدیریت کنید.
مثال تبدیل Nullable به نوع معمولی
اگر میخواهید یک مقدار nullable را به نوع معمولی تبدیل کنید، میتوانید از ()GetValueOrDefault استفاده کنید:
int result = nullableInt.GetValueOrDefault(); // اگر null باشد، مقدار پیشفرض 0 برمیگردد
Console.WriteLine(result); // خروجی: 0
جمعبندی
- نوع داده Nullable در #C به شما این امکان را میدهد که برای انواع دادههایی مانند int، double و bool که معمولاً نمیتوانند null باشند، مقدار null را ذخیره کنید.
- <Nullable<T یک ساختار جنریک است که به شما این امکان را میدهد تا انواع مختلف دادهها را nullable کنید.
- برای کار با مقادیر nullable، از ویژگیهایی مانند HasValue و Value استفاده میکنید تا مطمئن شوید که مقدار واقعی موجود است.
