Передача типа свойства в универсальную функцию - PullRequest
0 голосов
/ 09 ноября 2018

Я читаю текстовый файл, перевожу данные, где каждая строка идет либо в объекте заголовка, либо в объекте items. У меня проблема с nullables

'p' в приведенном ниже коде исходит от

Dim properties As PropertyInfo() = GetType(UploadMain).GetProperties()

Приведенный ниже код выдает ошибку:

Неверное приведение из «System.DateTime» к «System.Nullable» 1 [[System.DateTime, mscorlib, Версия = 4.0.0.0, Культура = Нейтральный, PublicKeyToken = b77a5c561934e089]] '

p.SetValue(header, Convert.ChangeType(dataObject, p.PropertyType))

соответствующее свойство в классе

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

1 Ответ

0 голосов
/ 13 ноября 2018

Ваша проблема с ChangeType, он вам вообще нужен?Если вы это сделаете, определите, является ли свойство Nullable, если это так, то вы можете использовать GetUnderlyingType

Convert.ChangeType(dataObject, Nullable.GetUnderlyingType(p.PropertyType))
...