اذهب إلى المحتوى

السؤال

Recommended Posts

  • 0
نشر

أهلًا بك،

قمت للتو بمتابعة هذا الفيديو ووجدته قد بدأ بشرح الأساسيات value types  و reference type بما فيها من أنواع Nullable بشكل واضح ومبسط .. أرجو أن تشاهده وإن استصعبت في فهم أي نقطة أو لم يكن مفيدًا بشكل كافي بالنسبة لك أن تخبرنا

 بالتوفيق...

  • 0
نشر

وعليكم السلام ورحمة الله.

اخي الكريم فكر بالمثال التالي: ليكن لدي نموذج لتسجيل المستخدمين ضمن تطبيق معين، ومن ضمن حقول هذا النموذج يوجد حقل تاريخ الميلاد والذي هو حقل اختياري وليس اجباري.

بمعنى يمكن للمستخدم تحديد تاريخ ميلاده او عدم تحديده.

الآن، لنفرض اسم الحقل هو BirthDate ونوعه بالتأكيد DateTime

DateTime BirthDate;

الآن لدينا حالتين:

1. قام احد المستخدمين بالتسجيل، وتحديد تاريخ ميلاده 1/1/1990، لاحقاً سيقوم التطبيق بحساب عمر المستخدم بناءً على تاريخ الميلاد فيكون عمره حالياً 29 عاماً.

2. قام احد المستخدمين بالتسجيل، ولم يحدد تاريخ ميلاده! لكن قاعدة البيانات ترفض ان يكون هذا الحقل فارغاً، لذلك ستقوم انت او السي شارب نفسها بإعطاء القيمة الافتراضية لهذا النوع DateTime وستكون 1/1/0001، لاحقا سيقوم التطبيق بحساب عمر المستخدم، فيكون عمره الحالي 2019 عاماً!!!، او ربما تقوم انت بافتراض قيمة معينة في حال لم يقما المستخدم بادخال القيمة، مثلاً، 1/1/1980، بالتالي سيكون عمر المستخدم 39 عاماً، لكن هذا غير صحيح، وسيظهر بشكل ان المستخدم قام بتحديد تاريخ ميلاده. بالتالي ستضطر لحل اخر وهو كالتالي:

تقوم بتعريف متغير جديد من نوع bool وليكن اسمه IsBirthDateSelected، وفي حال قام المستخدم بتحديد تاريخ ميلاده تكون قيمة هذا المتغير True وعلى هذا الاساس سيقوم التطبيق باحتساب عمر المستخدم، واذا كانت False لن يقوم باحتساب عمر المستخدم!!!

 

لكن ألا ترى أن هذه العملية مرهقة، خصوصاً اذا كان لديك عشر متغيرات اختيارية ضمن نموذج التسجيل هذا!، وربما في كامل التطبيق يكون لديك عشرات الحالات المشابه، وستضطر انت دائما لعمل تزامل بين قيمة BirthDate وقيمة IsBirthDateSelected، وهذا العمل كلياً هو زيادة بالكود لا اكثر، فقط لتقوم بالالتفاف على نقطة ان قيمة تاريخ الميلاد فارغة، وان الحقل BirthDate يتطلب وجود قيمة.

 

اذا الحل الامثل هو بجعل الحقل BirthDate قادر على ان يحمل قيمة فارغة، اي Nullable، ضمن سي شارب هذا يتم ببساطة بتعريف المتغير بالشكل التالي:

DateTime? BirthDate;

لاحظ وضعنا اشارة الاستفهام بجانب النوع،اي اصبح قادرا على احتواء قيمة فارغة،

الآن ضمن التطبيق، انت بحاجة لمعرفه اذا كان هذا الحقل يحوي قيمة أم لا، ويتم ذلك بواسطة:

if( BirthDate.HasValue)
{
    // Calculate Age
	DateTime BirthDate = new DateTime();
	int age = ((DateTime.Now - BirthDate.Value).Days) / 365;
}

لاحظ اننا قمنا بالتحقق من ان الحقل يحوي على قيمة او لا أولاً، ثم داخل جملة If قمنا بالوصول لهذه القيمة عن طريق BirthDate.Value

اعتقد بأن الصورة اصبحت واضحة. الآن قم بقياس هذا المثال على باقي الأنواع الأخرى مثل int، bool, double وغيرها.

 

بالتوفيق،،،

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...