Pregunta

A menudo necesito usar Integer.TryParse para probar si un valor es un entero. Sin embargo, cuando usa TryParse, tiene que pasar una variable de referencia a la función, por lo que siempre tengo la necesidad de crear un entero en blanco para pasar.

Dim tempInt as Integer
If Integer.TryParse(myInt, tempInt) Then

Encuentro que esto es bastante engorroso considerando que todo lo que quiero es una simple respuesta Verdadero / Falso. ¿Hay una mejor manera de abordar esto? ¿Por qué no hay una función sobrecargada donde solo puedo pasar el valor que quiero probar y obtener una respuesta verdadera / falsa?

¿Fue útil?

Solución

No es necesario declarar el entero.

If Integer.TryParse(intToCheck, 0) Then

o

If Integer.TryParse(intToCheck, Nothing) Then

Si tiene la capacidad de .Net 3.5, puede crear un método de extensión para cadenas.

Public Module MyExtensions

    <System.Runtime.CompilerServices.Extension()> _
    Public Function IsInteger(ByVal value As String) As Boolean
        If String.IsNullOrEmpty(value) Then
            Return False
        Else
            Return Integer.TryParse(value, Nothing)
        End If
    End Function

End Module

Y luego llamar como:

If value.IsInteger() Then

Lo siento, me dejo llevar, lo sé, pero también puedes agregar esto a la clase MyExtensions de arriba en .Net 3.5 y no te preocupes a menos que necesites validaciones.

<System.Runtime.CompilerServices.Extension()> _
Public Function ToInteger(ByVal value As String) As Integer
    If value.IsInteger() Then
        Return Integer.Parse(value)
    Else
        Return 0
    End If
End Function

Luego simplemente usa

value.ToInteger()

Esto devolverá 0 si no es un entero válido.

Otros consejos

Ya que está utilizando VB.net, puede usar la función IsNumeric

If IsNumeric(myInt) Then
    'Do Suff here
End If
public static class Util {

    public static Int32? ParseInt32(this string text) {
        Int32 result;
        if(!Int32.TryParse(text, out result))
            return null;
        return result;
    }

    public static bool IsParseInt32(this string text) {
        return text.ParseInt32() != null;
    }

}

Prueba este código.

Module IntegerHelpers

  Function IsInteger(ByVal p1 as String) as Boolean
    Dim unused as Integer = 0
    return Integer.TryParse(p1,unused)
  End Function
End Module

Lo bueno es que, dado que está declarada como una función de nivel de módulo, se puede usar sin un calificador. Ejemplo de uso

return IsInteger(mInt)

¿Por qué no escribir un método de extensión para limpiar su código? No he escrito VB.Net por un tiempo, pero aquí hay un ejemplo en c #:

public static class MyIntExtensionClass
{
  public static bool IsInteger(this string value)
  {
    if(string.IsNullOrEmpty(value))
      return false;

    int dummy;
    return int.TryParse(value, dummy);
  }
}

J Ambrose Little se realizó pruebas de tiempo para verificaciones de IsNumeric en 2003 . Es posible que desee volver a intentar las pruebas mencionadas con v2 de CLR.

Una variación sería:

Int32.TryParse(input_string, Globalization.NumberStyles.Integer)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top