Option Strict On 不允许从“<type1>”到“<type2>”的隐式转换

更新:2007 年 11 月

在类型检查开关 (Option Strict 语句) 设置为 On 的情况下,试图将一种类型转换为另一种无法容纳其值的类型,例如将 Long 转换为 Integer。

此转换类型被称为收缩转换,它在运行时可能失败。因此,Option Strict On 不允许隐式收缩转换。

**错误 ID:**BC30512

更正此错误

  1. 确定是否存在从 <type1> 到 <type2> 的任何类型的转换。如果这两种类型都是 Visual Basic 基本类型或者都是类的实例,那么,您通常可以参考 扩大转换和收缩转换 中的表来确认这一点。

  2. 如果仅存在从 <type1> 到 <type2> 的收缩转换,则应使用显式强制转换。如果转换失败,则 CType 函数DirectCast 关键字会引发运行时异常。TryCast 关键字仅适用于引用类型并在转换失败时返回 Nothing (Visual Basic)

  3. 如果存在收缩转换,而您的程序可以容忍运行时错误,或者您确信不可能发生运行时错误,则可以在源代码的开头指定 Option Strict Off。但您仍然应将转换包含在 Try...Catch...Finally 语句 (Visual Basic) 块中,以避免意外结果或程序过早终止。

  4. 如果不存在从 <type1> 到 <type2> 的转换,则必须重新计算程序逻辑。您或许可以编写代码,将值分配给与 <type1> 的预期值相对应的 <type2>。

  5. 如果不存在从 <type1> 到 <type2> 的转换,而且其中一个类型是已定义的类或结构,您或许可以定义该类型和其他类型之间的转换运算符。有关更多信息,请参见 如何:定义转换运算符

  6. 就一切情况而论,通常应避免使用收缩转换,除非可以捕获 Catch 块中的错误并进行有效的处理。

请参见

任务

如何:定义转换运算符

概念

扩大转换和收缩转换

参考

Option Strict 语句

CType 函数

DirectCast

TryCast

Nothing (Visual Basic)

Try...Catch...Finally 语句 (Visual Basic)