VB.NET Long轉Integer – 高位轉低位

把C#版純真數據庫讀取轉換成VB.NET 的時候遇到個奇特問題,一開始還以為是語言上的差異,但C#和VB.NET本是同根生,也不至於在高位數值往低位數值轉換的時候出現問題吧?

首先C#裡可以這麼寫

long a = 123456789;
int b =(int)a;

這樣寫編譯器是不會搞錯的,而且還可以順利執行。

而VB.NET裡

Dim a As Long = 123456789
Dim b As Int = CInt(a)

這樣寫一般都會提示“算術運算符溢出,這個值對於Int來說太大或者太小”

图像 002

難道C#的強制轉換真的做到強制了嗎?

谷歌搜索了下,在個一覺偏僻的博客上找到了解決方法,原來國外網站早已經有相關的解答,奈何英文水平渣渣,看不懂而錯過。

照例,要說明C#為什麼不會報錯。

原因很簡單,就是編譯器配置問題,C#在默認情況下,編譯器是不會去檢查運算是否溢出。

图像 008

而VB.NET在默認情況下編譯器會檢查運算是否溢出,知道原因後一切都好辦了,只需要關閉編譯器的檢查功能即可解決這個問題。

图像 003

图像 005

图像 006

把“不做整數溢出檢查”勾上,那麼VB.NET讀取純真數據庫就完成了。

发表评论

邮箱地址不会被公开。 必填项已用*标注