۱۳۸۸ خرداد ۹, شنبه

System.Nullable : متغیرها هم میتوانند نال بپذیرند

سلام
گاهی اوقات ما متغیرهایی از نوع Numeric ، Bool ، DateTime داریم که علاوه بر مقادیر مناسبی که ممکنه بگیرن میتونن Null هم بگیرن. خوب همه شما میدونین که اگر کد زیر رو بنویسیم به ارور برمیخوریم:


Int32 myVar = null; //error: myVar cannot be set to null

این خطا به این دلیله که در حالت عادی این گونه متغیرها نمیتونن مقادریر Null بپذیرن. برای حل این مشکل میتونیم از System.Nullable استفاده کنیم که علاوه بر مقدیر مناسب Datatype میشه Null رو هم بهش نسبت داد.
شکل کلی تعریف یک متغیر به صورت Nullable به دوصورت زیر است:

Nullable<T> myVar = null;

یا


T? myVar = null;

که در اینجا T یک Datytype هست.مثال:

Nullable<Int32> myVar = null;

یا

Int32? myVar = null;

اگر بخواهیم یک متغیر Nullable رو به یک متغیر عادی تسبت بدیم باید از عملگر ?? استفاده کنیم تا بتونیم به متغیر نال پذیر مقدار پیش فرض بدیم.به مثال زیر دقت کنید:


// ?? operator example.

int? x = null;

// y = x, unless x is null, in which case y = -1.

int y = x ?? -1;


در اینجا میگیم اگر x نال نبود که هیچی اما اگر نال بود بجاش -1 رو بریز تو y.
چند مثال:

System.Nullable<int> i1 = 0;

System.Nullable<int> i2 = null;

int i3 = 0;

if (i1 == i2)

{
System.Console.WriteLine("i1 and i2 are the same");
}
else
{
System.Console.WriteLine("i1 and i2 are different");


}

if (i1 == i3)
{
System.Console.WriteLine("i1 and i3 are the same");
}
else
{
System.Console.WriteLine("i1 and i3 are different");
}

خروجی قطعه کد بالا بصورت زیر هست:

i1 and i2 are different

i1 and i3 are the same


مثال 2:


System.Nullable<int> i1 = null;

try

{

System.Console.WriteLine("The value is {0}", i1.Value);

}

catch

{

System.Console.WriteLine("null causes an exception");

}

i1 = 1;

try

{

System.Console.WriteLine("The value is {0}", i1.Value);

}

catch

{

System.Console.WriteLine("1 causes an exception");

}


خروجی بصورت زیر است:




null causes an exception

The value is 1


مثال 3: نسبت دادن یک مقدار متغیر نال پذیر در صورتی که نال باشد:



int DefaultIfNull(System.Nullable<int> i)

{

int retVal;

if (i.HasValue)

{

retVal = i;

}

else

{

retVal = 1;

}

return retVal;

}

int DefaultIfNull(System.Nullable<int> i)

{

return i ?? 10;

}


تابع HasValue چک میکنه که آیا یک متغیر نال پذیر مقدار نال دارد یا خیر.
مثال 4: پارامتر نال پذیر:


private void button1_Click(object sender, EventArgs e)

{

bool b=true;

b = nima(null);

MessageBox.Show(b.ToString());

b = nima(2);

MessageBox.Show(b.ToString());

}

private bool nima(int? i)

{

if (i == null)

return false;

else

return true;

}


نکته 1: از نوع string نمیشه در متغیرهای نال پذیر استفاده کرد چون استرینگ یک رفرنس هست به رشته ای از کاراکترها
نکته 2: یکی از بهترین استفاده های این متغیرها وقتی است که شما میخواین از ستونی در جدولتون اطلاعات بخونین که میتونه مثادیر نال داشته باشه.

۲ نظر:

  1. سلام مهندس
    خسته نباشید
    من کتاب آموزش sql 2005
    شما رو دانلود کردم ولی اینطور که بنظر میرسه
    باید ناقص باشه چون 10 تا کتاب pdf
    هستش که آخر کتاب در مورد فصل بعد هم گفتین ولی من هرجا گشتم فقط این 10 تا کتاب بود
    ممنون میشم راهنمایی کنید که بقیه کتاب رو از کجا بگیرم
    email man = poozhan@yahoo.com
    راستی باید از شما تشکر کنم برای توضیح بسیار عالی و دقیق
    خدانگهدار
    منتظر جوابتون هستم

    پاسخ دادنحذف
  2. سلام
    حتما تو فکرم هست که بذارمشون یکم سرم شلوغه اما تو فکرش هستم .موفق باشید

    پاسخ دادنحذف