Преобразование объекта в другой тип объекта с помощью TypeConverter в VB.Net

#vb.net #typeconverter

#vb.net #typeconverter

Вопрос:

Я изо всех сил пытаюсь понять использование TypeConverters и как их использовать.

 Imports System.ComponentModel
Imports System.Globalization

<TypeConverter(GetType(OrderTypeConverter))>
Public Class OrderType1

Public Sub New()

Public Sub New(Order As OrderType2)
    OrderNumber = Order.OrderNo
    'Etc Etc
End Sub

Public Property OrderNumber As String
Public Property OrderDescription As String

End Class

Public Class OrderType2

Public Property OrderNo As String
Public Property Description As String

End Class

Public Class OrderTypeConverter
Inherits TypeConverter

Public Overrides Function CanConvertTo(context As ITypeDescriptorContext, destinationType As Type) As Boolean
    If destinationType = GetType(OrderType2) Then
        Return True
    End If

    Return MyBase.CanConvertTo(context, destinationType)
End Function

Public Overrides Function ConvertTo(context As ITypeDescriptorContext, culture As CultureInfo, value As Object, destinationType As Type) As Object

    If destinationType = GetType(OrderType2) Then

        Dim OldOrder As OrderType1 = DirectCast(value, OrderType1)

        Dim NewOrder As New OrderType2
        NewOrder.Description = OldOrder.OrderDescription
        NewOrder.OrderNo = OldOrder.OrderNumber

        Return NewOrder
    End If

    Return MyBase.ConvertTo(context, culture, value, destinationType)
End Function

End Class
  

Я не уверен, как реализовать преобразование, если вышеуказанное верно.

Я знаю, что альтернативой было бы передать порядок OrderType2 в новый метод Порядка OrderType1, а затем просмотреть все свойства и т.д. И т.п. Но должен быть лучший способ

Комментарии:

1. Ваш TypeConverter в любом случае копирует значения свойств одно за другим, так что это экономит? Похоже, что в этих двух типах нет ничего отличного. Я подозреваю, что наследование может сыграть роль во всем, что вы пытаетесь сделать.

2. Я не контролирую OrderType2, и класс не может быть унаследован. Я пытаюсь придерживаться наилучшей практики для получения опыта обучения, а не подделывать ее.