将1种类型的对象转移到不同类型的对象

时间:2010-02-02 07:45:28

标签: .net

我正在尝试创建一种传输机制,我可以使用一个Class对象并将其转换为webservice对象,只需要很少的代码。

我使用这种方法取得了相当不错的成功,但是当我将自定义类作为源对象的属性返回时,我需要优化技术。

Private Sub Transfer(ByVal src As Object, ByVal dst As Object)
    Dim theSourceProperties() As Reflection.PropertyInfo

    theSourceProperties = src.GetType.GetProperties(Reflection.BindingFlags.Public Or Reflection.BindingFlags.Instance)

    For Each s As Reflection.PropertyInfo In theSourceProperties
        If s.CanRead AndAlso (Not s.PropertyType.IsGenericType) Then
            Dim d As Reflection.PropertyInfo
            d = dst.GetType.GetProperty(s.Name, Reflection.BindingFlags.Public Or Reflection.BindingFlags.Instance)
            If d IsNot Nothing AndAlso d.CanWrite Then
                d.SetValue(dst, s.GetValue(src, Nothing), Nothing)
            End If
        End If
    Next
End Sub

我需要的是确定源属性是否为基本类型(字符串,int16,int32等,而不是复杂类型)。

我正在查看s.PropertyType.Attributes并检查其上的掩码,但我似乎无法找到任何表明它是基类型的东西。

我可以检查一下吗?

1 个答案:

答案 0 :(得分:0)

感谢abmv的提示,这是我最终使用的最终结果。我仍然需要编写一些特定属性的代码,但大多数属性都是通过这种机制自动处理的。

Private Sub Transfer(ByVal src As Object, ByVal dst As Object)
    Dim theSourceProperties() As Reflection.PropertyInfo

    theSourceProperties = src.GetType.GetProperties(Reflection.BindingFlags.Public Or Reflection.BindingFlags.Instance)

    For Each s As Reflection.PropertyInfo In theSourceProperties
        If s.CanRead AndAlso (Not s.PropertyType.IsGenericType) And (s.PropertyType.IsPrimitive Or s.PropertyType.UnderlyingSystemType Is GetType(String)) Then
            Dim d As Reflection.PropertyInfo
            d = dst.GetType.GetProperty(s.Name, Reflection.BindingFlags.Public Or Reflection.BindingFlags.Instance)
            If d IsNot Nothing AndAlso d.CanWrite Then
                d.SetValue(dst, s.GetValue(src, Nothing), Nothing)
            End If
        End If
    Next
End Sub