我正在尝试基于对象的属性创建数据集.例如,我有一个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
我的问题是,其中一些属性是可空类型,数据集不支持这些类型.有没有办法从可空类型中提取底层系统类型?
谢谢.
这是你在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会阻塞它...你可能没有那个问题,但我的情况非常开放.
希望如果我没有直接回答你的问题,你可以蚕食这个并让你到达你需要去的地方 - 但我刚刚实施了这一点,我的测试都已经过去了.