如果整数/双精度失败,默认为0的最佳方法是什么?

时间:2013-05-10 14:44:19

标签: .net vb.net

每次使用CIntInteger.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行)?

4 个答案:

答案 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

相关问题