Le plus sûr moyen de vérifier entier
C'est probally plus d'une élégance question de la fonctionnalité. Je suis à la recherche d'absolument la façon la plus sûre de vérifier pour un entier à partir d'une chaîne et d'un objet,
À l'aide de la plupart des fonctions intégrées pour cela .net semblent générer une exception de première chance, affichée dans la fenêtre exécution, et au fil du temps ils ont juste construire. quelles sont les implications de ces exceptions qu'ils ne semblent pas affecter le fonctionnement du système.
Voici mes deux tentatives, à la fois se sentir maladroit et je sais qu'il y a à être un meilleur moyen que d'utiliser VB.IsDBNull et Entier.TryParse... Ou suis-je juste être anal.
(à l'entier de l'objet)
Dim nInteger As Integer = 0
If oData Is Nothing OrElse VB.IsDBNull(oData) Then
Else
If bThrowErrorIfInvalid Then
Else
On Error Resume Next
End If
nInteger = CType(oData, Integer)
End If
Return nInteger
(à l'entier de la chaîne)
Dim nInteger As Integer = 0
If sText Is Nothing Then
Else
If bThrowErrorIfInvalid Then
Else
On Error Resume Next
End If
Integer.TryParse(sText, nInteger)
End If
Return nInteger
OriginalL'auteur CodeKiwi | 2009-02-24
Vous devez vous connecter pour publier un commentaire.
Quoi de mal avec l'aide de l'Entier.TryParse? C'est ce que cela a été fait pour...
Comment est-ce maladroit? C# ne pas VB je sais, mais même diff)
EDIT: si vous voulez vérifier à partir d'un objet (depuis TryParse s'appuie sur une chaîne de caractères) et je ne suis pas trop certaine de la façon dont vous avez réellement l'intention de l'utiliser. Le fait de couvrir vos préoccupations un peu, car cette méthode permettra de vérifier à la fois de votre cas?
Il est de droite. Il semble droit.
J'ai ajouté une autre méthode de l'échantillon, en montrant comment il peut répondre pour le type d'objet et le type de chaîne pour la vérification de type int. Espérons que l'aide eleviate de vos préoccupations...
J'ai aimé ce deuxième exemple, je pense que possède l'élégance dont je parlais. Merci.
Que faire si l'objet est autre chose qu'une chaîne ou un entier? Cette version de TryParseInt ne serait pas gérer cette situation. Par exemple, un nullable entier sera certainement convertir un nombre entier, mais ce serait exclure. Il permettra également de lancer une exception si o est nulle.
OriginalL'auteur Rosstified
Vous pouvez essayer ceci:
Convert
est dans leSystem
espace de noms.EDIT: Remarque: Si vous envisagez de mettre tout autre code dans le
Try
bloc, assurez-vous de spécifier que la seule exception de laCatch
doit attraper est l'exception levée parConvert.ToInt32
si/quand il échoue - sinon, vous pourriez vous retrouver avec un méchant problème si quelque chose d'autre dans le try/catch doit échouer.L'idée est de Convertir.ToInt32 toujours lancer une exception si la conversion a échoué - et la beauté, c'est qu'il peut prendre toutes sortes d'objets de sorte que vous n'avez pas besoin de convertir au préalable. Pour le rendre élégant, vous devez spécifier le Convertir du type d'exception pour attraper, si.
Je suis d'accord que le Convertir.x mechinism est fantastique et jusqu'à maintenant j'ai utilisé religieusement, mais je crois try catch me rend paresseux (hense cette question), il fonctionne alors pourquoi faire j'ai besoin de réfléchir.
Les Exceptions sont mauvais pour la performance.
OriginalL'auteur Fritz H
Integer.TryParse
est conçu pour être un moyen sûr de le faire: c'est pourquoi il a été mis dans le cadre de la première place. Pour un Objet, vous pouvez toujours juste appelerToString()
avant d'utiliserTryParse
.Je voudrais aussi éviter d'utiliser
On Error Resume Next
en faveur d'uneTry-Catch
bloc si vous avez besoin d'avaler une erreur pour une raison quelconque, car il est beaucoup moins susceptible de causer un effet indésirable.Je ne sais pas si il y a une différence entre Essayer de les Attraper et de les Reprendre-à Côté, mais je ne voudrais pas qu'il y ait beaucoup, et même s'il y est, ça vaut le coup pour rendre le code plus robuste.
Il y a parfois de, mais les conséquences de performance de "Erreur" sont les plus importants.
OriginalL'auteur Jeromy Irvine
Puisque c'est VB vous pouvez également utiliser la fonction IsNumeric
Eh bien, la question est seulement dit de vérifier pour un entier. Si vous voulez faire la conversion, vous venez de le coupler avec n'importe quel standard de conversion/fonction de conversion comme Convertir.ToInt32,CInt, Entier.Analyser, etc.
OriginalL'auteur Jacob Adams
il semble que dans ton deuxième exemple, vous avez un inutile vérifier bThrowErrorIfInvalid parce que Entier.TryParse jamais renvoie une erreur. Quelque Chose Comme
hmmm, bon spotting.
OriginalL'auteur Jimmy
OriginalL'auteur Geoffrey Lee