这是一个真正基本的男生级别错误,但我还没想到它尽管在我的通用更新程序类中使用了相当多的反射。
谜题如下:我想获取我在代码示例中提取的值的类型。使用该类型我希望将其与另一个提取值进行比较。要与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
我所有的考试都通过了,所以我现在就和它一起生活。如果相关属性的值之间没有差异,我根本不希望触发更新。