J'ai juste besoin de savoir si la valeur est numérique. Je n'ai rien à faire avec la valeur. Est-ce le meilleur moyen? Se sentir sale créer une variable que je n'utiliserai jamais au-delà de cela:
8 Réponses :
C'est la meilleure façon de le faire à ma connaissance - c'est ce que les normes de notre société adhèrent toute façon en raison de la manipulation des erreurs étant effectuée dans l'analyse. P>
Ce détail Les avantages: https://web.archive.org/web/20150510214425/http://www.dotnetperls.com:80/int-trypsarse P>
Lien mis à jour via la machine arrière; Original Tryparse code> n'est plus là.
Ce n'est pas aussi flexible que en général, cependant, je voudrais Recommander coller avec int.tryparse code>, mais vous pouvez vérifier si chaque personnage est un nombre: int.tryparse code>. Vous pouvez même appeler le paramètre inutilisé "ignoré" pour être explicite sur votre intention, par exemple: p>
Vous devez ajouter une manipulation pour '+' code>, '' - ' code>, ' ',' code> ". ' Code>" >, 'E' code> et 'e' code>, et peut-être d'autres que je suis négligeant, car ce sont des caractères non numériques pouvant apparaître dans une chaîne numérique.
@Phoog: Absolument accepté, c'est pourquoi j'ai recommandé int.tryparse code> à la fin. Je voudrais simplement offrir une autre façon de regarder le problème dans des conditions plus contraignantes.
Oui, en utilisant la méthode Vous voudrez peut-être envelopper cela dans votre propre ensemble de méthodes d'assistance (qui pourraient spécifier la culture appropriée, etc., si la valeur par défaut ne vous convient pas) et de retourner un Bien sûr, vous devez déterminer quel type d'analyse est le plus approprié - même pour les entiers, vous devez déterminer si la plage de Tryparse CODE> et Ignorer le paramètre out> est le meilleur moyen de le faire. P>
bool code> sans le out code> paramètre pour les rendre plus faciles à appeler. p>
int32 code> suffit à votre cas d'utilisation. Dans mon expérience, la plupart des entrées numériques ont sa propre gamme «naturelle» de valeurs valides, ce qui est peu susceptible d'être exactement la plage de tout type prédéfini. Vous pouvez donc souhaiter développer vos méthodes d'assistance pour inclure la plage de valeurs valides à accepter. P>
Si INT32 n'est pas assez grand et qu'il a .net 4, il pourrait utiliser system.numerics.biginteger.tryparse () code>
@C. Lawrence Wenham: N'oubliez pas que les pauvres, négligés int64 code>!
@Lukeh: Ouais, mais BigInteger code> "va à 11".
@C. Lawrence Wenham: J'adore ça. Ce ne serait-il pas fabuleux d'avoir une langue où les types d'entier normaux ne sont-ils portés que [-10, 10], mais BigInteger est allé à 11?
Vous pouvez essayer d'utiliser RegEX analysant pour déterminer qu'il n'y a pas de caractères non numériques dans une chaîne ou vous pouvez utiliser int.tryparse (), double.tryparse (), float.tryparse () en fonction de l'entrée. < / p>
C'est la façon recommandée de le faire en C #. Cependant, vous pouvez également ajouter microsoft.visalbasic.dll code> comme référence à votre projet, puis utiliser microsoft.visualbasic.information.isnumérique () code> p> p>
Vous pouvez utiliser des expressions régulières
Regex _isNumber = new Regex(@"^\d+$"); _isNumber.IsMatch(txtFoo.Text);
"est numérique" est un terme ambigu. p>
Il n'y a donc pas de "meilleure" voie, et le cadre fournit une multitude de façons différentes d'analyser les numéros. P>
bool test (string teststring)
{ for (i=0;i==teststring.length;i++){
if instr("0123456789.,-+Ee",teststring.substring(i,1) <0){return false;}
// some additional tests below here if you like
return true;
}
however E1001E12e.12e would be noted as a number a little bit more magic is needed to do a clean check, but then you might be able to determine if its a int or a float too..
123.45 code> est numérique, mais échouera ce chèque. Testez-vous uniquement pour les entiers?Il y a une fonction Char.Snumérique, si je me souviens bien
@Winston Smith - c'est hors de la question de cette question, comme 123.45 ne s'appliquerait jamais à un INT. Si c'était le cas, ils utiliseraient un flotteur et faire flotter.tryparse.
@thedixon - c'était mon point.