عملگر ؟؟ در سی شارپ


یکی از عملگر(=Operator)های جالب سی شارپ که شاید خیلی ها با آن آشنایی ندارند، عملگری است به نام «??» که جهت مشخص کردن یک مقدار پیش فرض برای انواع های داده ای nullable به کار می رود. این عملگر شبیه به دستوارت شرطی عمل می کند، بدین صورت که اگر مقدار سمت چپ آن null باشد، مقدار سمت راست را برمی گراند و در غیر این صورت مقدار سمت چپ را برمی گرداند. فکر می کنم با یک مثال کاملاً متوجه منظورم خواهید شد :

string A = null;
string B = A ?? "DefaultValue";

در مثال بالا متغیری به نام A از نوع string تعریف کردیم و مقدار پیش فرض آن را برابر null قرار دادیم. سپس در خط دوم متغیر دیگری به نام B تعریف کردیم تا کاربرد عملگر ?? را درک کنید. در این خط، متغیر B مقدار رشته ای Default Value را در خود ذخیره خواهد کرد، زیرا سمت چپ آن (که متغیر A است) مقدار null دارد.

البته متغیرهای string قابلیت پذیرش null را دارند و به اصطلاح به آن nullable type می گویند. سودمندی عملگر ?? وقتی معلوم می شود که شما می خواهید مقدار پیش فرض برای انواع non-nullable type مانند int تعریف کنید; وقتی احتمال می دهید که امکان دارد در این گونه متغیرها مقدار null ذخیره شود. شاید شما هم با این مشکل برخورد کرده باشید که برخی مواقع به طور ناخواسته مقدار null به یک متغیر non-nullable مانند int نسبت داده می شود که در این موقعیت یک خطای کامپایلری دریافت خواهید کرد. اگر در این موارد از توابع تبدیل (cast) استفاده کنید یک InvalidOperationException دریافت خواهید نمود که باید آن را handle کنید. البته به راحتی می توانید با یک if ساده این مشکل را حل کنید اما در اینگونه موارد بهترین راه حل استفاده از عملگر ?? خواهد بود. برای در این موضوع به مثال زیر توجه کنید :

int? A = null;
int B = A ?? 0;

توجه داشته باشید، شما به صورت صریح نمی توانید مقدار null به انواع داده ای non-nullable نسبت بدهید، بلکه بایستی مانند مثال بالا، پس از نوشتن data type مورد نظر خود کاراکتر ? را قرار دهید. در خط دوم، ابتدا مقدار A بررسی می شود، اگر برار null بود (در اینجا) مقدار پیش فرض صفر را بر می گرداند، در غیر این صورت مقدار A را بر خواهد گرداند.

عملگر ؟؟ راه بسیار خوبی برای نسبت دادن متغیرهای nullable به متغیرهای non-nullable است.

عملگر ؟؟ در MSDN

farasun.wordpress.com

Subcribe to Farasun feedمشترک فراسان شويد

farasun.wordpress.com

مطالب مرتبط :

Advertisements