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

27 11 2008

یکی از عملگر(=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

مطالب مرتبط :


کارها

اطلاعات

10 جواب

27 11 2008
سروش

دست شما درد نکنه

28 11 2008
Salar

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

این عملگر دقیقا مانند کد زیر عمل می کنه:

int B = A.HasValue ? A.Value : 0;

28 11 2008
ایمان

ممنون سالار جان بابت ذکر این نکته. همونطور که گفتم عملگر ؟؟ مانند دستورات شرطی عمل می کنه.

3 12 2008
4news

سلام اگه دوست دارید ما رو لینک کنید

خوشحال میشیم اگه لینک کردید لطفا به ما بگید تا ما هم شما رو لینک کنیم.

5 12 2008
Dr.Behrooz

سلام دوست عزيز
تيم ما مايل به تبادل لينك با سايت شما مي باشد.
اگر شما هم مايل به تبادل لينك با سايت ما هستيد به ما خبر دهيد !
ايميل ما :
Takstars@Yahoo.com
سايت تيم ما :
http://www.FarsTools.com
موفق باشيد.

5 12 2008
ایمان

@ 4news , Dr.Behrooz :خیلی ممنون از لطف شما دوستان. متاسفانه بنده به تبادل لینک اعتقادی ندارم و فقط می تونم با وبلاگ ها و وب سایت هایی که موضوع آن ها با موضوع مطالب وبلاگ فراسان نزدیک تر است تبادل لینک داشته باشم.

باز هم ممنون از لطف شما
موفق باشید

5 12 2008
Dr.Behrooz

ok ممنون
موفق باشيد دوست عزيز

9 12 2008
تفاوت میان HyperLink و LinkButton در ASP.NET « Farasun

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

12 12 2008
علی

بسيار جالب بود
ممنون

9 02 2009
Farasun

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

دیدگاه‌تان را بنویسید: