首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >VB.NET如何从可空类型获取基础system.type?

VB.NET如何从可空类型获取基础system.type?
EN

Stack Overflow用户
提问于 2018-05-29 23:53:49
回答 2查看 0关注 0票数 0

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

代码语言:javascript
复制
For Each pi As PropertyInfo In person.GetType().GetProperties()
    Dim column As New DataColumn(pi.Name, pi.PropertyType)
    table.Columns.Add(column)
Next

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

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2018-05-30 08:39:40

首先,查看你是否处理Nullable类型的代码:

代码语言:javascript
复制
Private Function IsNullableType(ByVal myType As Type) As Boolean
    Return (myType.IsGenericType) AndAlso (myType.GetGenericTypeDefinition() Is GetType(Nullable(Of )))
End Function

请注意GetType中不常用的语法。这是必要的。

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

代码语言:javascript
复制
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
票数 0
EN

Stack Overflow用户

发布于 2018-05-30 09:43:50

代码语言:javascript
复制
Nullable.GetUnderylingType(myType)

将返回基础类型,如果它不是可空类型,则返回null。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100000134

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档