web-dev-qa-db-fra.com

Integer.TryParse - un meilleur moyen?

Je me trouve souvent obligé d'utiliser Integer.TryParse pour vérifier si une valeur est un entier. Cependant, lorsque vous utilisez TryParse, vous devez transmettre une variable de référence à la fonction. Je me trouve donc toujours dans l'obligation de créer un entier vide à transmettre. Généralement, cela ressemble à quelque chose comme:

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

Je trouve cela assez lourd étant donné que tout ce que je veux, c’est une simple réponse vrai/faux. Y a-t-il une meilleure façon d'aborder cela? Pourquoi n'y a-t-il pas une fonction surchargée où je peux simplement passer la valeur que je veux tester et obtenir une réponse vrai/faux?

30
Ryan Smith

Pas besoin de déclarer l'entier.

If Integer.TryParse(intToCheck, 0) Then

ou

If Integer.TryParse(intToCheck, Nothing) Then

Si vous avez la capacité .Net 3.5, vous pouvez créer une méthode d’extension pour les chaînes.

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

Et puis appelez comme:

If value.IsInteger() Then

Désolé, je sais que je m'emballe, mais vous pouvez aussi ajouter ceci à la classe MyExtensions ci-dessus dans .Net 3.5 et ne vous inquiétez pas, sauf si vous avez besoin de validations.

<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

Ensuite, utilisez simplement

value.ToInteger()

Cela retournera 0 si ce n'est pas un Integer valide.

79
Tom Anderson

Puisque vous utilisez VB.net, vous pouvez utiliser la fonction IsNumeric

If IsNumeric(myInt) Then
    'Do Suff here
End If
7
TonyB
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;
    }

}
5
yfeldblum

Essayez ce code. 

Module IntegerHelpers

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

La partie intéressante de Nice est que, puisqu'elle est déclarée en tant que fonction au niveau du module, elle peut être utilisée sans qualificateur. Exemple d'utilisation

return IsInteger(mInt)
2
JaredPar

Pourquoi ne pas écrire une méthode extension pour nettoyer votre code? Je n'ai pas écrit VB.Net depuis longtemps, mais voici un exemple 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);
  }
}
1
Jason Jackson

J Ambrose Little effectué tests de synchronisation pour les contrôles IsNumeric en 2003 . Vous voudrez peut-être réessayer les tests mentionnés avec la v2 du CLR.

0
icelava

Une variation serait:

Int32.TryParse(input_string, Globalization.NumberStyles.Integer)
0
Cerveser