【问题标题】:Why doesn't compiler error on build?为什么编译器在构建时不会出错?
【发布时间】:2025-11-29 17:05:02
【问题描述】:

我使用的是VB.NET,顶部是

Option Explicit

但是为什么当我这样做时编译器不会引发错误:-

obj.ThisFunction(Convert.ToInt32(strMessage))

功能是:-

Function ThisFunction(id as long)

当然,Int32 是 int 而 int64 是 long? VS 2013 中是否有我可以打开的编译器选项来发现这些?

【问题讨论】:

  • VB.NET 编译器自动将 Int32 转换为 long。
  • 如果您想发现类型错误,请使用OPTION STRICT ON。但是仍然允许隐式整数到长的转换。
  • 是的,strMessage 中的值现在可以很长,并且 Convert.ToInt32 会导致运行时错误。遍历所有代码以查找和升级每个 ToInt32 将是一场噩梦。如果我可以通过错误列表轻松做到这一点,那就太好了。 Strict 也开启了 :(
  • 由于您的strMessage 变量直到运行时才会被填充,您希望编译器如何捕获该错误?编译器完全无法知道该变量中的内容。

标签: vb.net visual-studio-2013 compiler-errors option-strict option-explicit


【解决方案1】:

这不是编译错误。如果您已编写代码显式strMessage 转换为Int32,那么编译器会假定您知道自己在此做什么。

为了检查这实际上是一个Int32,你可以使用Int32.TryParse

Int32 转换为Int64 即使使用Option Strict On 也不是编译错误,因为这是一个加宽 转换(Option Strict On 找到时会出现编译错误隐式缩小转换等)

【讨论】:

    最近更新 更多