Visual Studio 编译时为何能识别赋值与否却不能识别被零除?

如上代码,是通不过编译的,因为 Visual Studio 监测到:如果 id 不等于 1,也不等于 2,那么 data 就是一个未实例化的变量,调用 data.Import() 就会出错。

改成如下就正确的,因为它知道 data 在调用 Import 的时候,不可能为 null。

Visual Studio 很聪明吧,再来看看被零除的情况。

继续

这里在编译时就不会报错了,有人会说,Visual Studio 怎么监测不到呢?其实这和其机制有关,n 是个变量,不是常量,他的值,虽然我们人眼一看,在这里是 0,但如果它不是直接赋值的 0 呢?它是从其他地方读取或计算出来的呢?所以因为它是变量,Visual Studio 把它看作是编译时还不确定的值,只有在运行时确定,也就是说以上代码编译时不会发生编译时错误,但会在运行时发生运行时错误。

你可能感兴趣的