1

我使用VB.NET,上方是爲什麼不編譯編譯錯誤?

Option Explicit 

然而,爲什麼編譯器不會提高,當我做了一個錯誤: -

obj.ThisFunction(Convert.ToInt32(strMessage)) 

而且功能: -

Function ThisFunction(id as long) 

當然,Int32是int並且int64很長?在VS 2013中是否有編譯器選項,我可以打開以查看這些選項?

+0

VB.NET編譯器自動將Int32轉換爲long。 –

+0

如果您想要發現類型錯誤,請使用'OPTION STRICT ON'。但隱式整數到長轉換仍然是允許的。 – sloth

+0

是的,strMessage中的值現在可以非常長,並且Convert.ToInt32會導致運行時錯誤。這將是一個噩夢,通過所有的代碼尋找和擴大每個ToInt32。如果我可以通過錯誤列表輕鬆完成,那會很好。嚴格的也是:( – MiscellaneousUser

回答

4

這不是編譯錯誤。如果你已經明確地寫了strMessage轉換爲Int32,那麼編譯器會假定你知道你在這裏做什麼。

爲了檢驗這其實是一個Int32可以使用Int32.TryParse

轉換的Int32Int64不是編譯錯誤甚至Option Strict On,因爲這是一個擴大轉換(選項嚴格上給出了一個彙編當它發現隱含縮小轉換等)