我无法使下面的代码正常工作。
错误在最后一行:类型'ChangeType'未定义。
编译器是否认为ChangeType是我没有定义的自定义类型?
我不知道,请给我一个提示。 可能是我看不见树木的森林。
Dim DataValue as String = "True"
Dim ChangeTypeIndex() As String = {"System.Boolean", "System.Char", "System.SByte", "System.Byte", "System.Int16"}
Dim ChangeType As Type = Type.GetType(ChangeTypeIndex(0))
Dim Result = DirectCast(DataValue, ChangeType)
答案 0 :(得分:1)
不确定您要做什么,但是这里有一些代码可以使用。请注意,我已经更改了数组中的“类型”以包含有效的类型名称。
Dim DataValue As String = "True"
Dim ChangeTypeIndex() As String = {"System.Boolean", "System.Char", "System.SByte", "System.Byte", "System.Int16"}
Dim ChangeType As Type
For x As Integer = 0 To ChangeTypeIndex.Length - 1
ChangeType = Type.GetType(ChangeTypeIndex(x), True)
Next
ChangeType = Type.GetType(ChangeTypeIndex(0), True)
Dim Result As Object = CTypeDynamic(DataValue, ChangeType)
答案 1 :(得分:0)
这在VB.NET中是不可能的。 VB.NET是一种类型安全的语言,DirectCast
的明确目的是帮助进行编译时类型检查。由于在编译时会分析它的正确性,因此根据定义,不能为它提供类型的变量。 DirectCast
仅可用于将对象转换为另一种直接相关的类型(通过继承或实现)。由于DataValue
是String
,因此无论如何{,Boolean
都不会继承自String
,因此您无法将其转换为Boolean
。 {1}}确实允许您传递这样的变量类型。
.NET确实支持反射和后期绑定,因此,如果确实需要,可以执行相同的种类,但是通常最好避免这种情况尽力而为,以确保您从编译器的类型检查安全措施中获得最大收益。
除了警告,如果您确实需要这样做,则近似近似如下:
DirectCast