2016-05-12 121 views
-1

在VB.net中執行字符串連接時,我發現嘗試連接整數字符串時出現奇怪的運行時錯誤。Visual Basic強制轉換 - 從字符串轉換爲類型'Double'無效

這裏是我的小提琴:https://dotnetfiddle.net/NY4Y4V

Imports System 
Imports System.Collections.Generic 

Public Module Module1 
    Public Sub Main() 
     Dim t As Dictionary(Of Int32, DateTime?) = new Dictionary(Of Int32, DateTime?) 
     t.Add(12345, new DateTime()) 
     For Each f As KeyValuePair(Of Int32, DateTime?) In t 
      Console.WriteLine("Test string {" + f.Key + "}.") 
     Next 
    End Sub 
End Module 

具體來說,我很好奇,爲什麼例外:

System.InvalidCastException:從字符串轉換 「測試字符串{」 鍵入 '雙師型'無效。

正在發生。我知道,這是一個簡單的解決方法,如果我明確的整數轉換爲字符串:

Console.WriteLine("Test string {" + f.Key.ToString() + "}.") 

我只是好奇發生了什麼場景會出現此錯誤鑄造後面。我在代碼中的任何地方都沒有觸及雙打,所以我不確定爲什麼要輸入'Double'來投射這個問題。

回答

3

VB中的+運算符是一個複雜的野獸。它可以做得很好different things depending on its operands。根據你的情況,它下面的第三排在該表:

一個表達式是數值數據類型而另一個是字符串

因此:

如果選項嚴格,然後生成一個編譯器錯誤。

如果選項嚴格,則隱含轉換字符串和補充。

如果字符串不能轉換爲,然後拋出一個InvalidCastException異常。

看起來Option Strict必須在你的代碼Off,所以這的確是試圖將String轉換爲Double,因此示數。

理想情況下,總是使用Option Strict On(和Option Explicit On-它們通常是我在使用VB時檢查的第一件事) - 它會在編譯時顯示各種潛在的運行時問題。

另外,如果你想保證字符串連接,Option Strict或沒有,你可以使用& operator

+0

'如果你想保證字符串連接,Option Strict與否,你可以使用&operator'很高興你在你的文章中提到這個。我不知道有多少次這樣咬我工作的人以及我遇到的一些事情。好帖子! – Codexer

+0

很好的答案,謝謝! – thomasdclark

相關問題