以下可以給出一些提示。
對於以下
If "String" = CInt(1) Then
End If
設置InnerException堆棧跟蹤顯示
at Microsoft.VisualBasic.CompilerServices.Conversions.ToDouble(String Value, NumberFormatInfo NumberFormat)
at Microsoft.VisualBasic.CompilerServices.Conversions.ToDouble(String Value)
即使你改變了語句
If "String" = CDbl(1) Then
或
If "String" = CDec(1) Then
它仍然顯示上面給出的innerexception stacktrace。
這意味着它必須對右側值做任何事情。這是編譯器的行爲,同時進行隱式轉換以將字符串轉換爲更加適應的數據類型,該數據類型爲double(long將會太長 - 雙關語意圖)。
這種行爲可以通過改變聲明,以證明:
If CInt("String") = CLng(1) Then
End If
爲此,的InnerException堆棧跟蹤顯示
at Microsoft.VisualBasic.CompilerServices.Conversions.ParseDouble(String Value, NumberFormatInfo NumberFormat)
at Microsoft.VisualBasic.CompilerServices.Conversions.ToInteger(String Value)
甚至爲顯式類型轉換意味着它首先嚐試將字符串轉換爲雙(最容易),然後將其轉換爲整數。
與類型轉換相比,這更多與類型提升有關。 – Blindy 2011-04-18 20:49:54
似乎沒有「類型促銷」標籤。但是,是的,我認爲你是對的。 – Kratz 2011-04-18 20:56:06