将 属性 的类型传递给泛型函数
Passing the type of the property to generic function
我正在阅读文本文件,翻译每行进入 header object 或项目 object 的数据。我遇到了可空值问题
下面代码中的 'p' 来自
Dim properties As PropertyInfo() = GetType(UploadMain).GetProperties()
下面的代码抛出错误:
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))
对应属性中的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
环顾四周,发现了下面这个函数,是我从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
我在 type1 和 type2 上都尝试过,但收到未定义的错误消息。
Dim type1 as Type = p.[GetType]()
Dim type2 As Type = p.PropertyType
p.SetValue(header, ChangeTypeUtlity.ChangeType(Of type2)(dataObject))
如何将我的 属性 类型传递给上述函数?
你可以用C#给出解决方案。不需要 VB.Net
您的问题出在 ChangeType 上,您甚至需要它吗?如果这样做,请检测 属性 是否为 Nullable,如果是则可以使用 GetUnderlyingType
Convert.ChangeType(dataObject, Nullable.GetUnderlyingType(p.PropertyType))
我正在阅读文本文件,翻译每行进入 header object 或项目 object 的数据。我遇到了可空值问题
下面代码中的'p' 来自
Dim properties As PropertyInfo() = GetType(UploadMain).GetProperties()
下面的代码抛出错误:
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))
对应属性中的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
环顾四周,发现了下面这个函数,是我从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
我在 type1 和 type2 上都尝试过,但收到未定义的错误消息。
Dim type1 as Type = p.[GetType]()
Dim type2 As Type = p.PropertyType
p.SetValue(header, ChangeTypeUtlity.ChangeType(Of type2)(dataObject))
如何将我的 属性 类型传递给上述函数?
你可以用C#给出解决方案。不需要 VB.Net
您的问题出在 ChangeType 上,您甚至需要它吗?如果这样做,请检测 属性 是否为 Nullable,如果是则可以使用 GetUnderlyingType
Convert.ChangeType(dataObject, Nullable.GetUnderlyingType(p.PropertyType))