Question

Je dois souvent 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 at-il pas une fonction surchargée où je peux simplement passer la valeur que je veux tester et obtenir une réponse vrai / faux?

Était-ce utile?

La solution

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 ensuite, 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()

Ceci renverra 0 s'il n'est pas un entier valide.

Autres conseils

Puisque vous utilisez VB.net, vous pouvez utiliser la fonction 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;
    }

}

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 est que, puisqu'elle est déclarée en tant que fonction au niveau du module, elle peut être utilisée sans qualificatif. Exemple d'utilisation

return IsInteger(mInt)

Pourquoi ne pas écrire une méthode d'extension pour nettoyer votre code? Je n’ai pas écrit VB.Net depuis un moment, 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);
  }
}

J Ambrose Little a joué 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.

Une variation serait:

Int32.TryParse(input_string, Globalization.NumberStyles.Integer)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top