如何让 CType/DirectCast 使用定义的变量而不是直接类型?

Gnuelmpf

我无法让下面的代码工作。

错误在最后一行:未定义类型“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)
史蒂文·多加特

这在 VB.NET 中是不可能的。VB.NET 是一种类型安全语言,其明确目的DirectCast是帮助编译时类型检查。由于在编译时分析它的正确性,根据定义,不能为该类型提供变量。DirectCast只能用于将对象转换为另一个直接相关的类型(通过继承或实现)。由于DataValue是 a String,您无论如何都不能将其Boolean强制转换为 a (因为String不继承自Boolean),即使DirectCast确实允许您传递这样的变量类型。

.NET不支持反射和后期绑定,这样就可以做同样的样的东西,如果你真的需要,但它通常是一个好主意,以避免这类事情多就可以了,这样才能保证您从编译器的类型检查安全措施中获得了最大的好处。

除了警告之外,如果您真的需要这样做,那么近似值将是这样的:

Option Strict Off

' ...

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 o As Object = Activator.CreateInstance(changeType)
Dim result As Object = o.Parse(dataValue)
Console.WriteLine(result.GetType().Name)  ' Outputs "Boolean"
Console.WriteLine(result)  ' Outputs "True"

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在使用列名而不是列索引加载数据集时如何定义变量类型?

如何定义不像类型那样使用的变量?

如何声明不是变量的类型

如何指定内联类型中使用的类型变量,与函数定义中使用的类型变量相同?

如何定义参数类型而不是参数类型?

如何定义导入变量类型

如何定义不是类的泛型类型?

Wordpress 如何将自定义帖子类型直接链接到自定义字段而不是父帖子页面

如何直接在名称空间中定义数据类型

TypeScript:如何使用变量推断的类型在类外部定义具有相同类型的另一个变量

如何定义不是列表的自定义插槽类型?

如何使用一个定义或函数使用C打印任何变量类型?

如果定义了变量,如何使用变量?

如何定义包含泛型类型变量的类型数组

如何使用作为参数传递给方法的类类型来定义局部变量

如何在动态SQL中使用表变量?或从用户定义的表类型创建临时表?

如何使用自定义类类型绑定视图模型变量

如何对类型而不是实例使用CLOS?

何时以及如何使用 DataSource 而不是直接的 SqlConnection

如何使用dplyr引用变量而不是列

如何使用变量而不是文件句柄

如何为 :contains 使用变量而不是类?

Ruby graphql如何定义不是Active Record的对象类型?

如何从变量创建自定义类?(不是对象)

如何键入参数化不直接使用该类型的结构?

如何使用条件直接分配布尔变量

如何使用类型为<TSource>的变量

使用enquo时如何测试变量类型?

如何使用Type类型的变量作为Type?