1

我不喜欢每次使用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

4 回答 4

7

老实说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
于 2013-05-10T15:09:52.637 回答
5

如果不需要,则不应使用 try/catch。抛出异常涉及很多开销。

相反,您可以简单地使用此代码(没有 if/end if 语句)

Dim value As Integer = 0
Int32.TryParse(stringValue, value)

如果字符串是可解析的,那么您将拥有该值,否则为 0。

于 2013-05-10T14:51:18.293 回答
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
于 2013-05-10T15:47:41.083 回答
0

试用Integer.TryParse(String, Integer)

您传递要解析的字符串和要存储结果的整数。

TryParse返回一个布尔值,说明解析是成功还是失败。所以你可以做

If Not Integer.TryParse(myNonInt, DestinationInt)
    DestinationInt = 0
End If

如果解析成功,值会自动存储在DestinationInt.

于 2013-05-10T14:50:22.090 回答