Đây là câu trả lời của bạn, trong VB. Điều này có thể là quá mức cần thiết cho mục đích của bạn, nhưng nó cũng có thể hữu ích cho một số người khác.
Trước hết, đây là đoạn code để tìm hiểu xem bạn đang làm việc với một loại Nullable:
Private Function IsNullableType(ByVal myType As Type) As Boolean
Return (myType.IsGenericType) AndAlso (myType.GetGenericTypeDefinition() Is GetType(Nullable(Of)))
End Function
Lưu ý cú pháp không bình thường trong GetType. No cân thiêt. Chỉ cần làm GetType (Nullable) là một trong những bình luận được đề xuất đã không làm việc cho tôi.
Vì vậy, trang bị đó, bạn có thể làm một cái gì đó như thế này ... Ở đây, trong một công cụ ORM, tôi đang cố gắng để có được giá trị vào một kiểu generic có thể có hoặc không có Nullable:
If (Not value Is Nothing) AndAlso IsNullableType(GetType(T)) Then
Dim UnderlyingType As Type = Nullable.GetUnderlyingType(GetType(T))
Me.InnerValue = Convert.ChangeType(value, UnderlyingType)
Else
Me.InnerValue = value
End If
Lưu ý rằng tôi kiểm tra Không có gì trong dòng đầu tiên bởi vì Convert.ChangeType sẽ choke trên nó ... Bạn có thể không có vấn đề đó, nhưng tình hình của tôi là cực kỳ mở kết thúc. Hy vọng rằng nếu tôi không trả lời trực tiếp câu hỏi của bạn, bạn có thể cannibalize điều này và đưa bạn đến nơi bạn cần đến - nhưng tôi đã thực hiện những khoảnh khắc này trước đây, và các bài kiểm tra của tôi đều được chuyển qua.
Nguồn
2009-04-15 16:43:29
if (type.IsGenericType AndAlso type.GetGenericTypeDefinition là GetType (Nullable)) –
Đó thực sự không phải là bản dịch chính xác cho VB, kỳ lạ là đủ. Kiểm tra câu trả lời của tôi. –
Có, 'Nullable' và' Nullable <> 'là hai loại khác nhau. –