nó hoạt động trong VB 2005 (DotNet 2.0) nhưng nó xấu xí.
Bạn không thể sử dụng nó như biến thông thường, tôi nghĩ rằng nó có thể hoạt động như một loại đối tượng nhưng không.
Thay vì điều này:
dim oInt as object
dim i as integer
if oInt is nothing then
msgbox("int is null")
else
i = cint(oInt)
end if
bạn có điều này.
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
Vấn đề ở đây là nếu biến của bạn là rỗng và bạn xảy ra, hãy gọi thuộc tính Giá trị sẽ chặn một ngoại lệ chưa được giải quyết. Ví dụ:
ví dụ, cái yêu thích của tôi là cái này.
AddParamToSQLCmd(sqlCmd, "@SomeID", SqlDbType.Int, 0, ParameterDirection.Input, iif(oInt.HasValue, oInt.Value, DBNull.value))
Sẽ dẫn đến lỗi thời gian chạy khi giá trị Nullable giả định của bạn là null !!!
vì vậy đây là nullable (số nguyên) vs mã đối tượng
nullable (số nguyên)
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
Object
AddParamToSQLCmd(sqlCmd, "@SomeID", SqlDbType.Int, 0, ParameterDirection.Input, oInt)
Sự tương đương và đấm bốc không có tác dụng trong VB 2005. Những thay đổi trong năm 2008 tập trung vào việc thêm "?" cú pháp và thực thi nâng cấp toán tử. Một điều cần lưu ý, mặc dù, là hỗ trợ cho "?" cú pháp không được thêm vào VS Code Model/Code DOM, vì vậy bất kỳ mã được thiết kế nào được tạo ra có sử dụng các kiểu nullable sẽ luôn sử dụng cú pháp chung cũ. –