GetType不存在VB中的反射拼图

时间:2017-08-31 10:00:43

标签: vb.net reflection

这是一个真正基本的男生级别错误,但我还没想到它尽管在我的通用更新程序类中使用了相当多的反射。

谜题如下:我想获取我在代码示例中提取的值的类型。使用该类型我希望将其与另一个提取值进行比较。要与Option Strict On正确比较,我必须将提取的值直接传递给PropertyInfo所说的类型。

以下代码仅说明了我在Directcast或Ctype版本中使用它。

For Each p As PropertyInfo In _validProperties
           Dim NewValue = p.GetValue(UpdateItem)
           Dim x = CType(NewValue, p.PropertyType)  'Error p.PropertyType does not exist --How?
'Elided
Next 

'Alternative approach

For Each p As PropertyInfo In _validProperties
        Dim NewValue = p.GetValue(UpdateItem)
         Dim x = DirectCast(NewValue, p.PropertyType) 'Error p.PropertyType does not exist --How?
        'Elided
Next

我已经尝试将新发现的类型显式地放在它自己的变量中,它确实存在。

这是一个奇怪的小陷阱我已经有过几次并且通常已经解决但是这个陷阱没有变化。因此,我很容易误解我需要如何使用实例x.Gettype(或GetType(Class)语法)。

无论我做什么,p.PropertyType都不存在。

有人可以清除我对此的迷茫心态吗?

编辑:目前,Option Strict仅关闭以允许此功能。

 For Each p In _validProperties
        Dim NewValue = p.GetValue(UpdateItem), OriginalValue = p.GetValue(originalItem)
        If (p.PropertyType.Name.Contains("Nullable") AndAlso Not Nullable.Equals(NewValue, OriginalValue)) _
            OrElse NewValue <> OriginalValue Then p.SetValue(originalItem, NewValue)
    Next

我所有的考试都通过了,所以我现在就和它一起生活。如果相关属性的值之间没有差异,我根本不希望触发更新。

0 个答案:

没有答案