Option Strict On 不允许从“<type1>”到“<type2>”的隐式转换
你已尝试将一种类型转换为另一种可能无法包含值的类型,例如,将 Long
转换为 Integer
,其中类型检查开关 (Long
) 已被设置为 On
。
此转换类型称为 收缩转换,它在运行时可能会失败。 正因如此, Option Strict On
不允许隐式收缩转换。
错误 ID: BC30512
更正此错误
确定是否存在从
<type1>
到<type2>
的任何类型的转换。 如果二者都为 Visual Basic 基本类型,或如果二者都为类的实例,则通常都可通过参考扩大转换和收缩转换中的表格来确定。如果只存在从
<type1>
到<type2>
的收缩转换,则应使用显式强制转换。 如果转换失败,CType Function 和 DirectCast Operator 关键字会引发运行时异常。 如果转换失败,TryCast 运算符关键字仅适用于引用类型并返回 Nothing。如果存在收缩转换并且程序可以容忍运行时失败,或者你确信不可能发生运行时失败,则可以在源代码的开头指定
Option Strict Off
。 但你仍应将转换括在 Try...Catch...Finally Statement 块内,以避免意外结果或程序提前终止。如果不存在从
<type1>
到<type2>
的转换,则必须重新计算程序逻辑。 你可能需要编写代码,该代码可以向对应于<type2>
的预期值的<type1>
分配值。如果不存在从
<type1>
到<type2>
的转换,并且其中一种类型是你已定义的类或结构,则你可能需要定义该类型与另一种类型之间的来回转换运算符。 有关更多信息,请参见 How to: Define a Conversion Operator。在所有情况下并且一般原则是,除非可以捕获
Catch
块中的故障并有效地处理它们,否则应避免使用收缩转换。