اینجا میتونی برنامه نویسی ویندوز رو به طور کاملا رایگان یاد بگیری
3 سال پیش / خواندن دقیقه

نوع های Nullable در سی شارپ +مثال

در سی شارپ یک value type نمیتواند مقدار null را در خود نگه دارد. گاهی اوقات نیاز است یک متغیر علاوه بر اینکه مقادیر واقعی در محدوده ی نوع خود را نگه میدارد ، بتواند مقدار null را هم در خود ذخیره سازی کند. در این مواقع از نوع های Nullable در سی شارپ استفاده میکنیم.

انواع Nullable

همانطور که می‌دانید یک value type نمی‌تواند مقدار null را در خود نگه دارد. برای مثال int i = null باعث می شود که در زمان اجرا با خطا روبرو شوید. در سی شارپ نسخه ۲ انواع nullable معرفی شدند که اجازه می‌دهند مقدار null را به یک متغیر value type انتساب داد. شما می توانید یک نوع nullable را با استفاده از عبارت <Nullable<t که t در آن یک نوع است را تعریف کنید :

Nullable<int> i = null;

یک نوع nullable علاوه بر این که دارای محدوده ی داده ای نوع مورد نظر خود است می تواند مقدار null را هم در خود نگه دارد. برای مثال <Nullable<int علاوه بر اینکه می‌تواند مقداری بین ۲۱۴۷۴۸۳۶۴۸- تا ۲۱۴۷۴۸۳۶۴۷ را در خود نگه دارد، می‌تواند مقدار null را نیز در خود ذخیره کند. انواع Nullable نمونه ای از ساختار <System.Nullable<T هستند. 

به آنها به چشم ساختاری به شکل زیر نگاه کنید :

[Serializable]
public struct Nullable<T> where T : struct
{        
    public bool HasValue { get; }
      
    public T Value { get; }
        
    // other implementation
}

زمانی که از انواع nullable استفاده می کنید می‌توانید از مشخصه value برای اینکه مطمئن شوید مقداری به متغیر انتساب داده شده است ، استفاده کنید. اگر مقداری به متغیر مورد نظر انتساب داده شده باشد value مقدار true را برمیگرداند در غیر این صورت مقدار بازگشتی false خواهد بود :


    Nullable<int> i = null;
    if (i.HasValue)
        Console.WriteLine(i.Value); // or Console.WriteLine(i)
    else
        Console.WriteLine("Null");
}

خروجی نمونه مثال بالا به شکل زیر خواهد بود :

Null

دسترسی به متغیر مورد نظر با استفاده از مشخصه value در صورتی‌که متغیر با null مقدار دهی شده باشد باعث بروز استثنا در برنامه میشود :

 

نوع های Nullable در سی شارپ +مثال

 برای حل این مشکل از متد ()GetValueOrDefault استفاده کنید. این متد در صورتی که متغیر شامل مقداری واقعی باشد، مقدار موردنظر را برمی گرداند و در صورتی که مقدار متغیر null باشد مقدار پیش فرض را بر میگرداند :

static void Main(string[] args)
{
    Nullable<int> i = null;
    Console.WriteLine(i.GetValueOrDefault()); 
}

در نمونه مثال بالا با توجه به اینکه متغیر حاوی مقدار null است، متد ()GetValueOrDefault مقدار پیش فرض صفر را برای متغیر i برخواهد گرداند. خروجی نمونه مثال بالا به شکل زیر است :

0

قاعده نوشتاری مختصر شده برای انواع Nullable

میتوانید از عملگر '?' به شکل ?int و ?long به جای <Nullable<T برای تعریف متغیر های Nullable استفاده نمایید :

int? i = null;
double? D = null;

از عملگر '??' برای انتساب یک متغیر از نوع Nullable به یک متغیر از نوع non-nullable استفاده کنید :

int? i = null;
            
int j = i ?? 0;
Console.WriteLine(j);

خروجی نمونه مثال بالا به شکل زیر است :

0

در نمونه مثال بالا i یک متغیر Nullable بوده و اگر بخواهیم آن را به متغیر j که یک non-nullable است انتساب دهیم در زمان اجرا با خطا روبرو میشویم. برای رفع این مشکل از عملگر '??' استفاده کرده ایم. در این صورت اگر متغیر i حاوی مقدار null باشد، مقدار صفر در متغیر j قرار خواهد گرفت. 



شاید از نوشته‌های زیر خوشتان بیاید
نظر خود را درباره این پست بنویسید ...

منوی سریع