Reputation: 3174
I am reading a text file, translate the data where each line either goes in header object or items object. I am having an issue with nullables
'p' in below code is coming from
Dim properties As PropertyInfo() = GetType(UploadMain).GetProperties()
The code below throws the error:
Invalid cast from 'System.DateTime' to 'System.Nullable`1[[System.DateTime, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]'
p.SetValue(header, Convert.ChangeType(dataObject, p.PropertyType))
the corresponding property in the class
private _orderDate As Date?
Public Property OrderDate As Date?
Get
Return _orderDate
End Get
Set(value As Date?)
_orderDate = value
End Set
End Property
After looking around, found the following function, which i translated from C#
Public Class ChangeTypeUtlity
Public Shared Function ChangeType(Of T)(ByVal value As Object) As T
Dim conversionType As Type = GetType(T)
If conversionType.IsGenericType AndAlso conversionType.GetGenericTypeDefinition().Equals(GetType(Nullable)) Then
If value Is Nothing Then
Return Nothing
Else
Dim nullableConverter As NullableConverter = New NullableConverter(conversionType)
conversionType = nullableConverter.UnderlyingType
End If
End If
Return CType(Convert.ChangeType(value, conversionType), T)
End Function
End Class
I have tried it with both type1 and type2 but getting error that it is not defined.
Dim type1 as Type = p.[GetType]()
Dim type2 As Type = p.PropertyType
p.SetValue(header, ChangeTypeUtlity.ChangeType(Of type2)(dataObject))
How can i pass my property type to the above function?
You can give the solution in C#. It doesn't need to be VB.Net
Upvotes: 0
Views: 119
Reputation: 12748
Your problem is with ChangeType, do you even need it? If you do, detect if the property is Nullable, if it is you can then use GetUnderlyingType
Convert.ChangeType(dataObject, Nullable.GetUnderlyingType(p.PropertyType))
Upvotes: 1