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

你已尝试将一种类型转换为另一种可能无法包含值的类型,例如,将 Long 转换为 Integer,其中类型检查开关 (Long) 已被设置为 On

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

错误 ID: BC30512

更正此错误

  1. 确定是否存在从 <type1><type2>的任何类型的转换。 如果二者都为 Visual Basic 基本类型,或如果二者都为类的实例,则通常都可通过参考扩大转换和收缩转换中的表格来确定。

  2. 如果只存在从 <type1><type2>的收缩转换,则应使用显式强制转换。 如果转换失败,CType FunctionDirectCast Operator 关键字会引发运行时异常。 如果转换失败,TryCast 运算符关键字仅适用于引用类型并返回 Nothing

  3. 如果存在收缩转换并且程序可以容忍运行时失败,或者你确信不可能发生运行时失败,则可以在源代码的开头指定 Option Strict Off 。 但你仍应将转换括在 Try...Catch...Finally Statement 块内,以避免意外结果或程序提前终止。

  4. 如果不存在从 <type1><type2>的转换,则必须重新计算程序逻辑。 你可能需要编写代码,该代码可以向对应于 <type2> 的预期值的 <type1>分配值。

  5. 如果不存在从 <type1><type2> 的转换,并且其中一种类型是你已定义的类或结构,则你可能需要定义该类型与另一种类型之间的来回转换运算符。 有关更多信息,请参见 How to: Define a Conversion Operator

  6. 在所有情况下并且一般原则是,除非可以捕获 Catch 块中的故障并有效地处理它们,否则应避免使用收缩转换。

另请参阅