检查整数的最安全的方法

时间:2009-02-24 03:58:29

标签: vb.net

这可能更像是一个优雅的问题,而不是功能。我正在寻找一种绝对最安全的方法来检查字符串和对象的整数,

在.net中使用大多数内置函数似乎会产生第一次机会异常,显示在立即窗口中,并且随着时间的推移它们就会构建。这些例外的含义是什么,因为它们似乎不会影响系统的运行。

这是我的两次尝试,都觉得笨重,我知道必须有比使用VB.IsDBNull和Integer.TryParse更好的方法......或者我只是肛门。

(来自对象的整数)

    Dim nInteger As Integer = 0
    If oData Is Nothing OrElse VB.IsDBNull(oData) Then
    Else
        If bThrowErrorIfInvalid Then
        Else
            On Error Resume Next
        End If
        nInteger = CType(oData, Integer)
    End If
    Return nInteger

(从字符串整数)

    Dim nInteger As Integer = 0
    If sText Is Nothing Then
    Else
        If bThrowErrorIfInvalid Then
        Else
            On Error Resume Next
        End If
        Integer.TryParse(sText, nInteger) 
    End If
    Return nInteger

6 个答案:

答案 0 :(得分:15)

使用Integer.TryParse有什么问题?这就是为...制作的......

int i = 0;
string toTest = "not number";
if(int.TryParse(toTest, out i))
{
   // it worked

}

那笨重怎么样? (C#不是VB我知道,但相同的差异)

编辑:添加,如果你想从一个对象检查(因为TryParse依赖于一个字符串),我不太确定你实际计划如何使用它。这是否会影响您的担忧,因为这种方法会检查您的两种情况?

    static bool TryParseInt(object o, out int i)
    {
        i = 0;

        if (o.GetType() == typeof(int))
        {
            i = (int)o;
            return true;
        }
        else if (o.GetType() == typeof(string))
        {
            return int.TryParse(o as string, out i);
        }

        return false;
    }

答案 1 :(得分:2)

你可以试试这个:

Dim i as Integer
Try
    i = Convert.ToInt32(obj)
Catch
    ' This ain't an int
End Try

Convert位于System命名空间中。

编辑:注意:如果要在Try块中放置任何其他代码,请确保指定Catch应捕获的唯一异常是{{1}抛出的异常if / when失败 - 否则如果try / catch中的其他东西失败,你最终可能会遇到一个讨厌的问题。

答案 2 :(得分:1)

Integer.TryParse旨在成为实现此目的的安全方式:这就是为什么它首先被放入框架中。对于对象,您始终可以在使用ToString()之前致电TryParse

如果由于某种原因需要吞下错误,我也会避免使用On Error Resume Next支持Try-Catch阻止,因为它不太可能导致不必要的副作用。

答案 3 :(得分:1)

因为它是VB,你也可以使用IsNumeric函数

答案 4 :(得分:0)

在您的第二个示例中,您对bThrowErrorIfInvalid进行了不必要的检查,因为Integer.TryParse从不会引发错误。喜欢的东西

If bThrowErrorIfInvalid And Not Integer.TryParse(sText, nInteger) Then
   Throw New ArgumentException()
EndIf

答案 5 :(得分:0)

Dim d As Double = 2.0
Dim i As Integer = CInt(d)
If d - i = 0 Then
     Debug.WriteLine("is integer")
Else
     Debug.WriteLine("not a integer")
End If