每次使用CInt
或Integer.Parse
时,我都不喜欢这样做(我意识到代价很高):
Try
someIntVariable = CInt(someStringVariable)
Catch ex As Exception
someIntVariable = 0
End Try
我不喜欢Integer.TryParse
涉及的所有代码行。我想我可以创建一个像:
Function ToInteger(str As String) As Integer
Dim number As Integer
Int32.TryParse(str, number)
Return number
End Function
但是,是不是已经有一种扩展方法或内置于.NET的东西可以以更优雅的方式为我做这件事(沿Nullable(Of T).GetValueOrDefault
行)?
答案 0 :(得分:6)
老实说Integer.TryParse
是可行的方法,但如果你不喜欢这种语法,你总是可以将它隐藏在扩展方法之后。
Public Module IntegerExtensions
<Extension()> _
Public Function AsIntOrDefault(ByVal valueToParse As String, Optional ByVal defaultValue As Integer = 0) As Integer
Dim retVal As Integer = 0
If Not Integer.TryParse(valueToParse, retVal) Then
retVal = defaultValue
End If
Return retVal
End Function
End Module
然后可以这样使用:
Public Class Foo
Public Sub Blah()
Dim value1 As Integer = "IWillNotParse".AsIntOrDefault() 'Should be 0
Dim value2 As Integer = "IWillNotParse".AsIntOrDefault(5) 'Should be 5
Dim value3 As Integer = "123".AsIntOrDefault() 'Should be 123
End Sub
End Class
答案 1 :(得分:5)
如果您不需要,请不要使用try / catch。抛出异常涉及很多开销。
相反,您可以简单地使用此代码(no if / end if statement)
Dim value As Integer = 0
Int32.TryParse(stringValue, value)
如果该字符串是可解析的,那么您将获得该值,否则为0。
答案 2 :(得分:1)
也许这对你有用..
Function ToInteger(str As String) As Integer
Dim number As Integer
If IsNumeric(str) Then
number = CInt(str)
Else
number = 0
End If
Return number
End Function
答案 3 :(得分:0)
试用Integer.TryParse(String, Integer)
传递要解析的String,以及要将结果存储到的整数。
TryParse
返回一个布尔值,说明解析是成功还是失败。所以你可以做到
If Not Integer.TryParse(myNonInt, DestinationInt)
DestinationInt = 0
End If
如果解析成功,该值将自动存储在DestinationInt
。