我需要維護一個傳統的VB.NET Web應用程序。數據分類是,我會說,不一致。尤其是,有些數據有時以整數存儲,有時作爲字符串存儲,我必須可靠地將字符串解析爲整數。如果解析出錯,它應該總是返回0.解析字符串爲整數(來地獄或高水)
問題是,我不能使用任何.NET/VB.NET解析函數,但我必須依靠自制函數。
我可以使用單行標準框架調用來執行每個字符串到整數解析任務嗎?
比方說,有一個字符串可以爲空,空,包含整數表示,如「10」或包含其他內容。
我嘗試了這些與空輸入字符串 「」:
CType(string, Integer) -> Conversion from string "" to type 'Integer' is not valid.
Convert.ToInt32(string) -> Input string was not in a correct format.
Integer.Parse(string) -> Input string was not in a correct format.
CInt(string) -> Conversion from string "" to type 'Integer' is not valid.
Val(string) -> Success!
但即使瓦爾可能會失敗。肯定的方法是調用自制功能:
Public Function ToInteger(ByVal s As String) As Integer
s = Trim(s)
Dim i As Integer
Try
i = Val(s)
Catch ex As Exception
i = 0
End Try
Return i
End Function
我覺得這很糟糕。這是不好的,因爲:
- 我想解析字符串爲整數!即使涉及語義學,這也不是火箭科學。
- 自制標準不能很好地保持。在代碼的某處,您總是會發現破碎的標準框架解決方案
因此,軟件中存在不必要的錯誤。我指責這個標準框架。除非找到更好的解決方案:)
感謝您的所有答案。 Int32.TryParse在這裏非常完美。
但是,如果您必須先將輸入強制轉換爲字符串,則強制轉換可能會失敗。就像從具有可能的DBNull值的數據庫對象讀取一樣。
Int32.TryParse在這裏是完美的,謝謝 -mika- – mika 2009-02-06 11:16:01
其實@Jon Int32.TryParse自動修剪白色空間。 ``32「`將導致`32`。 – David 2016-08-30 19:38:50