فرقشون اینه که زمانی که شما در متد ها، نخواهید از مقدار صریح استفاده کنید، می تونید مقدار پیش فرض آن نوع را برای متغیر خود انتخاب کنید. (توسط فراخوانی Constructor آن)
به عنوان مثال
کد زیر Error خواهد داد:
int DoSth()
{
int a;
return a;
}
// compil error : Use of unassigned local variable 'a'
که برای حلش دو راه وجود دارد
راه اول :
int DoSth()
{
int a=10;//or others value which you want
return a;
}
راه دوم :
int DoSth()
{
int a = new int();
return a;
}
که راه دوم معادل است با :
int DoSth()
{
int a = 0;
return a;
}
به این دلیل که مقدار پیش فرض برای نوع های عددی شامل Byte، Int و ... مقدار 0 می باشد
علاوه بر این موارد، شما می توانید خاصیت جدیدی به value Type ها اضافه کند که بتوانند مقدار Null را درون خود نگه داری کنند.
نحوه تعریف:
اضافه کردن ? به Type مورد نظر هنگام تعریف
int? a=null;
دقت کنید که در این حالت، متغیر a می توند مقدار Null بگیرد.
علاوه بر این دو property که البته به صورت readonly نیز می باشند به متغیر جدید شمااضافه می شوند که عبارتند از:
1) Hasvlue : اگر مقدار متغیر شما Null نباشد، مقدار true و در غیر این صورت مقدار false بر می گرداند.
2) Value : مقدار متغیر را در صورت معتبر بودن آن
مثال
void DoSth()
{
int? a=null;
if (a.HasValue)
MessageBox.Show(a.Value.ToString());
else
MessageBox.Show("Value Is Null");
}
موفق باشید