أنواع قيمة يقبل القيم الخالية

في بعض الأحيان تعمل مع نوع قيمة ليس لديه قيمة معرفة في ظروف معينة. على سبيل المثال، حقل في قاعدة البيانات يجب عليه التمييز بين امتلاك قيمة معينة لها مدلول و عدم امتلاك قيمة معينة. يمكن توسيع أنواع القيم لأخذ قيمها العادية أو القيمة الخالية. يسمى مثل هذا الـملحق نوع قبول القيم الخالية.

كل نوع يقبل بيانات فارغة يتم انشاءه من بنية Nullable<T> العامة. خذ بعين الاعتبار قاعدة بيانات تتعقب أنشطة متعلقة بالعمل. المثال التالي يقوم بإنشاء نوع قبول القيم الخالية Boolean و يصرح عن متغيّر من هذا النوع. يمكن كتابة التعريف بثلاث طرق:

Dim ridesBusToWork1? As Boolean
Dim ridesBusToWork2 As Boolean?
Dim ridesBusToWork3 As Nullable(Of Boolean)

متغيرridesBusToWork يمكنه الاحتفاظ بقيمة True، قيمة False، أو لا لقيمة إطلاق. القيمة الأولية الخاصة به ليست قيمة اطلاقا مما يعني في هذه الحالة أن المعلومات لم يتم بعد الحصول عليها من هذا الشخص. في تباين False قد يعني ان المعلومات قد تم الحصول عليها و يعني أيضا أن الشخص لا يركب الحافلة للذهاب الى العمل.

يمكنك تعريف متغيرات وخصائص مع نوع قبول القيم الخالية, و يمكنك تعريف صفيف من العناصر من نوع قبول القيم الخالية. يمكنك تعريف إجراءات مع نوع قبول القيم الخالية كمعلمات و يمكنك أن ترجع نوع قبول القيم الخالية من اجراء Function.

لا يمكن إنشاء نوع قبول القيم الخالية كنوع مرجع مثل الصفيف String، أو فئة. يجب أن يكون النوع الأساسي نوع قيمة. لمزيد من المعلومات، راجع تطبيق نوع البيانات.

استخدام متغير نوع قبول القيم الخالية

أهم أعضاء نوع قبول القيم الخالية هي HasValue و Value الخصائص. لمتغير من نوع قبول القيم الخالية HasValue يخبرك ما إذا كان المتغير يحتوي على قيمة محدده. اذا HasValue هو True، يمكنك قراءة القيمة من Value. لاحظ أن كلا HasValue و Value عبارة عن ReadOnly الخصائص.

القيم الافتراضية

عندما تقوم بتعريف متغير من نوع قبول القيم الخالية HasValue تحتوي الخاصية على القيمة افتراضية لـ False. وهذا يعني بشكل افتراضي المتغير ليس له قيمة معرفة, بدلاً من القيمة الافتراضية لنوع القيمة الأساسية الخاصة به. في المثال التالي المتغير numberOfChildren مبدئياً ليس له قيمة معرفة، بالرغم من القيمة الافتراضية لـ Integer النوع هو 0.

Dim numberOfChildren? As Integer

القيمة الخالية مفيدة للاشارة إلى قيمة غير معرّفة أو مجهول. اذا numberOfChildren قد تم تعريفها كـ Integer، لن يكون هناك أية قيمة قد تشير إلى أن المعلومات غير متوفر حالياً.

تخزين القيم

يمكنك تخزين قيمة في متغير أو خاصية من نوع قبول القيم الخالية بالطريقة المعتادة. يقوم المثال التالي بتعيين قيمة إلى متغير numberOfChildren تم تعريفه في المثال السابق.

numberOfChildren = 2

إذا كان متغير أو خاصية من نوع قبول القيم الخالية يحتوي على قيمة محدده, يمكنك أن تجعلها تعود إلى حالتها الأولية وهي عدم امتلاك قيمة معينة. يمكنك القيام بذلك عن طريق تعيين متغير أو خاصية إلى Nothing، كما في المثال التالي.

numberOfChildren = Nothing

ملاحظة

على الرغم من أنه يمكنك تعيين Nothing إلى متغير من نوع قبول القيم الخالية، لا يمكنك اختباره لـ Nothing باستخدام المساواة. المقارنة التي تستخدم علامة التساوي someVar = Nothing، دائماً تقيم لـ Nothing. يمكنك اختبار خاصية المتغير HasValue لـ False، أو اختبار باستخدام Is أو IsNot عامل التشغيل.

استرداد القيم

لـاسترداد قيمة متغير من نوع قبول القيم الخالية، يجب أولاً اختبار الخاصية الخاصة به HasValue للتأكد من أنها تحتوي على القيمة. إذا حاولت قراءة القيمة عند HasValue هو False, Visual Basic يطرح InvalidOperationException الاستثناء. يظهر المثال التالي أسلوبًا مستحسنًا لقراءة متغير numberOfChildren من الأمثلة السابقة.

If numberOfChildren.HasValue Then
    MsgBox("There are " & CStr(numberOfChildren) & " children.")
Else
    MsgBox("It is not known how many children there are.")
End If

مقارنة أنواع قبول القيم الخالية

عند استخدام متغيرات قبول القيم الخالية Boolean في التعبيرات المنطقية, يمكن أن تكون النتيجة True, False، أو Nothing. التالي هو جدول الحقيقة لـ And و Or. لأن b1 و b2 تحتوي الآن ثلاث قيم ممكنة,و هناك تسعة تركيبات لتقييمها.

B1:

b2

b1 و b2

b1 أو b2

Nothing

Nothing

Nothing

Nothing

Nothing

True

Nothing

True

Nothing

False

False

Nothing

True

Nothing

Nothing

True

True

True

True

True

True

False

False

True

False

Nothing

False

Nothing

False

True

False

True

False

False

False

False

عندما تكون القيمة المنطقية لمتغير أو تعبير Nothing، هو لا هذا ولا ذاك true ولا false. خذ بعين الاعتبار المثال التالي:

Dim b1? As Boolean
Dim b2? As Boolean
b1 = True
b2 = Nothing

' The following If statement displays "Expression is not true".
If (b1 And b2) Then
    Console.WriteLine("Expression is true")
Else
    Console.WriteLine("Expression is not true")
End If

' The following If statement displays "Expression is not false".
If Not (b1 And b2) Then
    Console.WriteLine("Expression is false")
Else
    Console.WriteLine("Expression is not false")
End If

في هذا المثال، b1 And b2 تقييم لـ Nothing. ونتيجة لذلك، الجملة Else تنفيذها في كل If الكشف والناتج كما يلي:

Expression is not true

Expression is not false

ملاحظة

AndAlso و OrElse، الذي يستخدم تقييم الدوائر القصيرة , يجب أن يتم تقييم معاملاتهم الثانية عندما تقيم الأولى لـ Nothing.

الـنشر

إذا كان أحد أو كلا المعاملين من حساب أو مقارنة, ازاحة أو عملية نوع عبارة عن قبول القيم الخالية ، يكون نتيجة العملية قبول القيم الخالية أيضا. إذا كان كلا المعاملين حتوي على قيم غير Nothing، يتم تنفيذ التشغيل على القيم الأساسية للمعاملات ، كما لو لم يكن أي نوع قبول القيم الخالية. في المثال التالي المتغيرات compare1 و sum1 تمت كتابها ضمنياً. إذا قمت بوضع مؤشر الماوس فوقها سترى أن المحول البرمجي يدل على أنواع قبول القيم الخالية لكل منهما.

' Variable n is a nullable type, but both m and n have proper values.
Dim m As Integer = 3
Dim n? As Integer = 2

' The comparison evaluated is 3>2, but compare1 is inferred to be of 
' type Boolean?.
Dim compare1 = m > n
' The values summed are 3 and 2, but sum1 is inferred to be of type Integer?.
Dim sum1 = m + n

' The following line displays: 3 * 2 * 5 * True
Console.WriteLine(m & " * " & n & " * " & sum1 & " * " & compare1)

إذا كان أحد أو كلا المعاملين لديه قيمة Nothing، يكون الناتج Nothing.

' Change the value of n to Nothing.
n = Nothing

Dim compare2 = m > n
Dim sum2 = m + n

' Because the values of n, compare2, and sum2 are all Nothing, the
' following line displays 3 * * *
Console.WriteLine(m & " * " & n & " * " & sum2 & " * " & compare2)

استخدام أنواع قبول القيم الخالية مع بيانات

قاعدة البيانات أحد الأماكن الأكثر أهمية لاستخدام أنواع قبول القيم الخالية. ليس كل كائنات قاعدة البيانات تدعم حالياً أنواع قبول القيم الخالية ولكن محولات الجدول التي تم إنشاؤها من مصمم تفعل ذلك. راجع "دعم TableAdapter لأنواع قابلة للقيم الخالية" في نظرة عامة حول محول الجدول.

راجع أيضًا:

المهام

استكشاف أخطاء أنواع البيانات

المرجع

InvalidOperationException

عامل تشغيل If

عامل التشغيل Is في (Visual Basic)

عامل التشغيل IsNot

HasValue

المبادئ

أنواع البيانات في Visual Basic

نظرة عامة حول محول الجدول

استدلال الـنوع المحلي

موارد أخرى

تطبيق نوع البيانات