تاريخ جملة VB.NET قيم الفارغة
سؤال
وأنا لا يمكن العثور على إجابة شافية. منذ C # 2.0 كنت قد تمكنت من إعلان
int? i = 125;
وكما اختصار ل
Nullable<int> i = Nullable<int>(123);
وأذكر القراءة في مكان ما VB.NET لم يسمح هذا الاختصار. لكن انخفاض ولمح، حاولت ذلك في VS 2008 اليوم، وأنه يعمل.
لا أحد يعرف ما إذا كان ما كان هذا الطريق منذ NET 2.0 أو كان هذا وأضاف في وقت لاحق؟
المحلول
وقدم System.Nullable في صافي 2.0 ويتوفر لVB <م> كنوع عام م>. لا يمكنك أن استخدم بناء الجملة قيم الفارغة. حتى في VS 2005 يمكنك القيام به:
Dim x as Nullable(of Integer)
وأنا لا أعرف إذا كان التكافؤ لاغيا والملاكمة يعمل لnullables في VB 2005، لكني أشك في أن الجواب هو نعم منذ قدم فريق صافي تغيير في CLR 2.0 لإنجاز الملاكمة مع nullables. أتصور VB تعزز هذا.
في عام 2008، يمكنك من الواضح أن مجرد القيام به:
Dim x as Integer?
نصائح أخرى
وكان يعمل في VB 2005 (DOTNET 2.0) ولكن من القبيح.
ولا يمكنك استخدام ذلك مثل متغير طبيعي، وأعتقد أنه قد يعمل مثل نوع الكائن ولكن لم يحدث ذلك.
وبدلا من هذا:
dim oInt as object
dim i as integer
if oInt is nothing then
msgbox("int is null")
else
i = cint(oInt)
end if
وكان لديك هذا.
Dim oInt as nullable(of integer)
dim i as integer
if oInt.HasValue = false then
msgbox("int is null")
else
i = oInt.Value
end if
والمشكلة هنا هي أنه إذا كان المتغير هو باطل وكنت يحدث لاستدعاء الخاصية قيمة ذلك barfs يصل استثناء غير معالج.
وهكذا على سبيل المثال، بلدي واحد المفضل هو هذا.
AddParamToSQLCmd(sqlCmd, "@SomeID", SqlDbType.Int, 0, ParameterDirection.Input, iif(oInt.HasValue, oInt.Value, DBNull.value))
هل ينتج خطأ وقت التشغيل الخاص بك عندما قيمة Nullable ومن المفترض فارغة !!!
وحتى هنا قيم الفارغة (من عدد صحيح) مقابل كود كائن
وقيم الفارغة (من عدد صحيح)
if oInt.HasValue then
AddParamToSQLCmd(sqlCmd, "@SomeID", SqlDbType.Int, 0, ParameterDirection.Input, oInt.Value)
else
AddParamToSQLCmd(sqlCmd, "@SomeID", SqlDbType.Int, 0, ParameterDirection.Input, dbnull.value)
end if
والكائن
AddParamToSQLCmd(sqlCmd, "@SomeID", SqlDbType.Int, 0, ParameterDirection.Input, oInt)
وIIRC، أدخلت أنواع nullable في .NET Framework 2.0 في مرحلة متأخرة جدا. تمكن فريق C # مترجم الالزام في المزيد من الدعم لغة لهم من فعل فريق VB.NET. فريق VB.NET أكثر أو أقل المحاصرين في VS2008. لهذا السبب يمكنك، على سبيل المثال، استخدم عامل == للمقارنة nullables في C # 2.0 بينما في VB.NET كان عليك أن طرح مع Nullable.Equals طريقة (). Grrr.
وأنا لا أعرف التاريخ، ولكن نعم انها كانت VS 2008 تعزيز.