当前位置:  开发笔记 > 后端 > 正文

VB.NET从可空类型中获取底层system.type

如何解决《VB.NET从可空类型中获取底层system.type》经验,为你挑选了1个好方法。

我正在尝试基于对象的属性创建数据集.例如,我有一个Person类的实例,其属性包括ID,Forename,Surname,DOB等.使用反射,我将基于对象属性向新数据集添加列:

For Each pi As PropertyInfo In person.GetType().GetProperties()
    Dim column As New DataColumn(pi.Name, pi.PropertyType)
    table.Columns.Add(column)
Next

我的问题是,其中一些属性是可空类型,数据集不支持这些类型.有没有办法从可空类型中提取底层系统类型?

谢谢.



1> Brian MacKay..:

这是你在VB中的答案.这可能对你的目的来说太过分了,但它也可能对其他人有用.

首先,这里是代码,以了解您是否正在处理Nullable类型:

Private Function IsNullableType(ByVal myType As Type) As Boolean
    Return (myType.IsGenericType) AndAlso (myType.GetGenericTypeDefinition() Is GetType(Nullable(Of )))
End Function

请注意GetType中的异常语法.这是必要的.只是将GetType(Nullable)作为建议的评论员之一对我不起作用.

所以,有了这个,你可以做这样的事情......在这里,在ORM工具中,我试图将值转换为可能或不可以为Nullable的泛型类型:

If (Not value Is Nothing) AndAlso IsNullableType(GetType(T)) Then
    Dim UnderlyingType As Type = Nullable.GetUnderlyingType(GetType(T))
    Me.InnerValue = Convert.ChangeType(value, UnderlyingType)
Else
    Me.InnerValue = value
End If

请注意,我在第一行检查Nothing因为Convert.ChangeType会阻塞它...你可能没有那个问题,但我的情况非常开放.

希望如果我没有直接回答你的问题,你可以蚕食这个并让你到达你需要去的地方 - 但我刚刚实施了这一点,我的测试都已经过去了.

推荐阅读
ifx0448363
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有