2012-04-20 67 views
1

在vb中,您可以使用文本框中的文本而不是數字表達式。我的意思是,如果我寫在TextBox1中50,也我可以寫這樣的代碼:vb.net中的文本投射或解析

Dim result As Double = TextBox1.Text + 0.4 

正如你看到的,我沒有將任何類型,但它在vb.net

的作品,但我想學習這有什麼缺點?

(我剛剛講的算術運算)

回答

1

在VB.NET中,只有在OPTION STRICT關閉的情況下才能避免這種情況 - 否則會產生錯誤。

在編程中,您應該儘可能精確地使用您的數據類型。所以,你可以寫你的代碼行:

Dim result as Double = Convert.ToDouble(TextBox1.Text) + 0.4 

或者,你可以做一些錯誤陷阱:

Dim Result as Double 
Try 
Result = Convert.ToDouble(TextBox1.Text) + 0.4 
Catch 
Result = 0 
End Try 

還有很多其他的東西,你可以使用,包括的TryParse。您甚至可以使用CDbl等VBA功能。

如果您依賴於所謂的隱式類型轉換,VB.NET將嘗試爲您轉換數據類型。這種方法的缺點是它會導致懶惰的編程。在這種情況下,你希望VB.NET具有容錯能力,但是如果你不這樣做呢?如果你允許它糾正你的錯誤,你最終會得到你產生錯誤的情況,因爲你的代碼沒有執行正確的數據類型。

右 - 這是黨的路線。就我個人而言,我非常喜歡VBA在幕後爲我輸入數據類型的方式!

+0

謝謝你的解釋..它真的很好:)現在它明確 – unbalanced 2012-04-20 19:25:54

2

引擎蓋下VB.net做的TextBox1.Text隱式收縮轉換(即CType(TextBox1.Text, Double)),使這項工作。這意味着你有Option Strict關閉。可能最大的這樣做的缺點是你會違反Option Strict On的最佳做法。

通過讓Option Strict off可以防止編譯器強制執行類型檢查。這使您可以使用更多的VB6方式進行編碼。因此允許縮小範圍的隱式轉換。如果您打開了此功能,則只允許擴大轉化次數(不會產生負面影響)。

雖然在這種特定情況下,它可能似乎不是什麼大不了的事,但離開它關閉你的整個代碼庫可能會導致微妙的錯誤在蠕動。

我建議你閱讀Widening and Narrowing Conversions (Visual Basic) on MSDN

+0

謝謝你Matt的感興趣。我已經知道發生了像ctype(...,...)這樣的背景,我正在閱讀文章..再次感謝你 – unbalanced 2012-04-20 19:27:15