我只是想知道如何正確地的選項嚴格轉換數據類型
- 轉換字符串到日期
- 整型轉換爲短
- 字符串轉換爲整數
- 字符串轉換爲加倍
正確無需使用任何類型的任何Ctypes。我打開選項嚴格,現在所有這些錯誤彈出,所以我試圖修復它們:)
我只是想知道如何正確地的選項嚴格轉換數據類型
正確無需使用任何類型的任何Ctypes。我打開選項嚴格,現在所有這些錯誤彈出,所以我試圖修復它們:)
NET提供了幾種方法來檢查,測試和轉換數據。
的TryParse
這也許是轉換的最防彈方式。它是理想的驗證用戶輸入:
Dim n As Int32
If Int32.TryParse(TextBox.Text, n) Then
' work with n
Else
' error handling: TextBox.Text cannot convert to int
End If
所有的核心數據類型支持(Int64
,Decimal
,Date
等)。它與其他不同:它不會返回轉換的值,而是指示源字符串是否可以轉換爲變量的Boolean
。
解析
Dim d as Double = Double.Parse(strVar)
這是正常使用時,你的代碼中創建strVar
,你知道它包含數字和沒有標點等Parse
和TryParse
都允許您解析來自其他文化的數據通過提供FormatProvider
和其他選項:
Dim strDec = "$ 123.45"
Dim decVal As Decimal = Decimal.Parse("$123.45", NumberStyles.Currency)
其他方法會扼住「$」,風格參數允許它。
Convert.ToInt32/Convert.ToInteger
這其中有許多,許多重載:
Dim intV As Int32 = Convert.ToInt32(aString)
Dim dblV As Double = Convert.ToDouble(aString)
Dim lngV As Int64 = Convert.ToInt64(aString)
的Convert.Toxxx
方法是略少專門比上面的那些。他們允許文化轉換,但他們假設直接轉換是可能的。也就是說,「123」將轉換爲整數,但不是「123.45」,它不會知道任何貨幣格式的東西。
所以,當你知道值可以轉換時使用它,也許是因爲你將值轉換爲字符串。這也從一個數據庫DataReader
工作拆箱對象:
myDT = Convert.ToDateTime(rdr("BirthDate"))
myV = Convert.ToInt32(rdr("FooValue"))
提供的數據實際上是爲這些類型的DBDataReader
存儲和「盒裝」爲對象,Convert
將正常工作。 (請注意,DBDataReaders可以直接返回類型化數據:n = rdr.GetInt32(1)
但您不能使用列名稱,只是序號位置)。
CINT,CSng函數...等
CInt
類似於Convert.ToInteger
,但根據MSDN在VB中的使用進行了優化。例如:
a = Convert.ToInt32("123.50") ' exception due to decimal point
a = CInt("123.50") ' a = 124
混淆?是的,但是一旦你掌握了它們,你就可以使用最適合這種情況的方法。有沒有辦法指定培養CInt
,CDec
等
瓦爾
不要使用Val
。永遠。這是一個非常通用的函數,它返回一個Double
。使用它會導致各種不良類型轉換:
Dim n = Val(tbSmallValue.Text)
n
作爲一個雙創建因此,如果文本是「5」,然後n
= 5.0
。當預期使用整數(例如插入數據庫)時,會使用n
錯誤。結果良莠不齊:
dd = Val("123.4") ' = 123.4
dd = Val("$123.45") ' = 0.0
dd = Val("123abc") ' = 123.0
NBCInt
和Convert.ToInt32
實施 「銀行家舍入」,其中.50
小數四捨五入到最接近偶數。 123.50
和124.50
兩輪/轉換爲124
。
看看'Date.Parse','Integer.Parse'和'Double.Parse'初學者 –
會不會,謝謝 – bbesase
將Integer轉換爲Short可能是有損的,你必須執行一個明確的轉換(例如'CShort(123)') –