vb.net - studio - Integer.TryParse-¿una mejor manera?
tryparse visual studio (7)
¿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);
}
}
A menudo me veo en la necesidad de utilizar Integer.TryParse para comprobar si un valor es un número entero. Sin embargo, cuando usa TryParse, tiene que pasar una variable de referencia a la función, por lo que siempre necesito crear un entero en blanco para pasar. Por lo general, se ve algo así como:
Dim tempInt as Integer
If Integer.TryParse(myInt, tempInt) Then
Encuentro esto bastante incómodo 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 puedo pasar el valor que quiero probar y obtener una respuesta verdadero / falso?
Como está utilizando VB.net puede usar la función IsNumeric
If IsNumeric(myInt) Then
''Do Suff here
End If
No es necesario declarar el número 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, dejarme llevar, lo sé, pero también puedes agregar esto a la clase MyExtensions de arriba en .Net 3.5 y no preocuparte 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
Entonces simplemente usa
value.ToInteger()
Esto devolverá 0 si no es un Entero válido.
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 se declara como una función de nivel de Módulo, se puede usar sin un calificador. Ejemplo de uso
return IsInteger(mInt)
Una variación sería:
Int32.TryParse(input_string, Globalization.NumberStyles.Integer)
J Ambrose Little realizó pruebas de sincronización para los controles IsNumeric en 2003 . Es posible que desee volver a intentar las pruebas mencionadas con la v2 de la CLR.
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;
}
}