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?
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.
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 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)
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);
}
}
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.
Une variation serait:
Int32.TryParse(input_string, Globalization.NumberStyles.Integer)